Cod*_*ict 19 speed nautilus ubuntu-10.04
我想知道为什么 Nautilus 在打开包含大量文件的目录时非常慢。例如,我的 /usr/lib 目录有 1900 个文件,显示所有内容大约需要 5 秒以上。自从我几个月前安装 Ubuntu 以来一直是这样,有时真的很烦人。我没有强大的硬件,但我知道 Windows 资源管理器比这快得多。
有什么办法可以加快速度吗?
Ubuntu 10.04
Gil*_*il' 27
跟踪执行nautilus
表明缓慢是由于两个因素的组合:
显示有关每个文件的有用信息是明智的。它查看文件的内容以确定要使用的图标,并可能显示预览。这可以通过在首选项中关闭预览来减弱。
它做了很多无用的工作(例如stat
多次检查每个文件,/proc/filesystems
甚至检查非目录)。您所能做的就是学习编程,改进程序并发送补丁。或者至少向作者发送功能请求(请使其更快)。
它为每个目录调用了几个外部进程,我还没有研究它们的作用。
小智 6
在“编辑 -> 首选项”下的“预览”选项卡中,尝试将所有选项切换为“从不”。
它也极大地帮助了我关闭“辅助技术”。您可以在“系统 -> 首选项 -> 辅助技术”中执行此操作。取消选中“启用辅助技术”。
您必须注销并重新登录才能使后面的更改生效。
这让我想起了我与Nautilus 和其他项目(包括 GVFS)的首席开发人员Alexander Larsson的一次谈话。
贾尔斯的回答,特别是关于 Nautilus 查看文件内容的部分,触及了 Nautilus “慢”的主要原因。然而,Giles 没有解释为什么这很慢,这对某些人来说可能是显而易见的,但对其他人来说则不然。以下是亚历克斯不得不说的话:
假设您从一张白纸开始,即您根本没有访问过文件系统。现在假设您运行 stat(“/some/dir/file”)。首先,内核必须找到文件,在技术上称为 inode。它首先查看文件系统超级块,其中存储了根目录的 inode。然后它打开根目录,找到“some”,打开那个,找到“dir”,等等,最终找到文件的 inode。
然后你必须实际读取inode数据。第一次读取后,这也缓存在 RAM 中。因此,读取只需发生一次。
把 HD 想象成一台老式唱机,一旦你用针放在正确的位置,你就可以在它旋转时保持快速阅读。然而,一旦你需要搬到一个不同的地方,称为“寻找”,你就会做一些非常不同的事情。您需要物理移动手臂,然后等待盘子旋转,直到正确的位置在针下。这种物理运动本质上很慢,因此磁盘的寻道时间很长。
那么,我们什么时候寻求?当然,这取决于文件系统布局。文件系统尝试连续存储文件以提高读取性能,并且它们通常也尝试将 inode 存储在彼此靠近的单个目录中,但这完全取决于文件何时写入、文件系统碎片等。因此,在最坏的情况下在这种情况下,文件的每个 stat 都会导致一次搜索,然后文件的每次打开都会导致第二次搜索。所以,这就是为什么在没有缓存任何东西的情况下需要这么长时间的原因。
某些文件系统比其他文件系统更好,碎片整理可能会有所帮助。你可以在应用程序中做一些事情。例如,GIO 在声明它们之前对从 readdir() 接收到的 inode 进行排序,希望 inode 编号与磁盘顺序有某种关系(它通常具有),从而最大限度地减少来回随机搜索。
一件重要的事情是设计您的数据存储和应用程序以尽量减少搜索。例如,这就是 Nautilus 读取 /usr/bin 很慢的原因,因为那里的文件通常没有扩展名,我们需要对每个文件进行魔术嗅探。所以,我们需要打开每个文件 => 每个文件一个搜索 => slooooow。另一个例子是将信息存储在许多小文件中的应用程序,就像以前的 gconf 那样,这也是一个坏主意。无论如何,在实践中,我认为除了尝试隐藏延迟之外,您无能为力。
他以以下说明结束:
解决整个困境的真正方法是远离旋转媒体。我听说英特尔 SSD 很棒。Linus 向他们发誓。
:-)
归档时间: |
|
查看次数: |
13212 次 |
最近记录: |