我想知道为什么Nautilus在打开包含很多文件的目录时会非常慢。例如,我的/ usr / lib目录有1900个文件,大约需要5秒钟以上才能显示所有内容。自几个月前我安装Ubuntu以来,就一直这样,有时候确实很烦人。我没有功能强大的硬件,但是我知道Windows资源管理器比这快得多。
有什么可以做的加快它吗?
Ubuntu 10.04
我想知道为什么Nautilus在打开包含很多文件的目录时会非常慢。例如,我的/ usr / lib目录有1900个文件,大约需要5秒钟以上才能显示所有内容。自几个月前我安装Ubuntu以来,就一直这样,有时候确实很烦人。我没有功能强大的硬件,但是我知道Windows资源管理器比这快得多。
有什么可以做的加快它吗?
Ubuntu 10.04
Answers:
跟踪show的执行情况nautilus
,发现速度慢是由于两个因素的组合:
显示有关每个文件的有用信息很聪明。它在文件内容中查找以确定要使用的图标,并可能显示预览。可以通过在首选项中关闭预览来减弱此效果。
它做了很多无用的工作(例如stat
多次访问每个文件,/proc/filesystems
甚至检查非目录)。您所能做的就是学习编程,完善程序并发送补丁。或者至少向作者发送功能请求(请使其更快)。
它为每个目录调用了多个外部进程,但我没有探讨它们的作用。
strace -f -ttt -p1234 -o nautilus.strace
其中1234是鹦鹉螺的pid。我没有详细分析跟踪,只是浏览了引导(很多涉及子流程的内容)和按文件的内容(多个stat
,open
对于某些文件而言)。
ls
并且在加载预览时可以进行浏览。如果我没记错的话,Windows资源管理器就是这样工作的。对于像这样的高度使用的Ubuntu程序来说,这是令人难以置信的。但是,不应抱怨,而应该做出贡献
这让我想起了我与Nautilus和其他项目(包括GVFS)的首席开发人员Alexander Larsson进行的一次谈话。
Giles 的答案,特别是关于Nautilus在文件内容中查找内容的一点,触及了Nautilus速度缓慢的主要原因。但是,Giles没有解释为什么这样做速度很慢,这对某些人可能是显而易见的,但对另一些人却不明显。这是亚历克斯不得不说的:
假设您从空白开始,即您根本没有访问文件系统。现在说您运行stat(“ / some / dir / file”)。首先,内核必须找到文件,从技术上讲,该文件称为inode。首先查找文件系统超级块,该文件存储超级目录的inode。然后,它打开根目录,找到“ some”,打开它,找到“ dir”,依此类推,最终找到文件的inode。
然后,您必须实际读取inode数据。第一次读取后,它也缓存在RAM中。因此,只读操作必须发生一次。
将HD视为旧的电唱机,一旦您用针将其放在正确的位置,您就可以在旋转时继续快速读取内容。但是,一旦您需要转移到另一个地方(称为“寻找”),您所做的事情就会大为不同。您需要物理移动手臂,然后等待盘旋转直到正确的位置在针下。这种物理运动本质上是缓慢的,因此磁盘的搜索时间很长。
那么,我们什么时候寻找?当然,这取决于文件系统的布局。文件系统尝试连续存储文件以提高读取性能,并且它们通常还尝试存储彼此靠近的单个目录的inode,但这全都取决于诸如何时写入文件,文件系统碎片等问题。因此,在最坏的情况下在这种情况下,文件的每个统计信息都会引起搜索,然后文件的每次打开都会引起第二次搜索。因此,这就是为什么在什么都没有缓存的情况下要花这么长时间的原因。
一些文件系统比其他文件系统更好,碎片整理可能会有所帮助。您可以在应用中执行某些操作。例如,GIO在声明接收到的索引节点希望索引节点编号与磁盘顺序(通常具有)之间存在某种关系之前,对它们从readdir()进行排序,从而最大程度地减少了来回随机查找。
重要的一件事是设计您的数据存储和应用程序,以最大程度地减少搜索量。例如,这就是Nautilus读取/ usr / bin速度很慢的原因,因为其中的文件通常没有扩展名,因此我们需要对每个文件进行魔术嗅探。因此,我们需要打开每个文件=>每个文件一个查找=> slooooow。另一个示例是将信息存储在许多小文件中的应用程序,例如曾经使用过的gconf,这也是一个坏主意。无论如何,在实践中,除了尝试隐藏延迟之外,我认为您无能为力。
他以以下注释结尾:
解决整个难题的真正方法是远离旋转介质。我听说英特尔SSD非常棒。莱纳斯向他们发誓。
:-)
尝试使用备用文件管理器,例如Thunar。Thunar在加载目录列表时速度更快,并且对于将文件从我的NTFS usb硬盘复制到ext4而言更加稳定,尽管文件很大,似乎像Nautilus一样有麻烦。
这是切换脚本的链接 https://help.ubuntu.com/community/DefaultFileManager
如果您在Gnome系统中安装了xfce,并且从未使用过,请删除exo-utils
它解决了我的问题,以及Chrome在文件下载后无法正确打开文件的问题。
在“编辑->首选项”下的“预览”选项卡中,尝试将所有选项切换为“从不”。
这也极大地帮助我关闭了“辅助技术”。您可以在“系统->首选项->辅助技术”中执行此操作。取消选中“启用辅助技术”。
您必须先注销然后重新登录,后一项更改才能生效。