什么缓存使文件搜索更准确第二次?


3

在具有Total Commander的HDD分区上的Windows上,如果我在文件系统根目录上进行文件搜索,例如C:\,它将花费相当长的时间:它在遍历整个目录结构时显示(看似深度优先)。

但是,如果我再次进行另一次搜索,在完成第一次搜索之后,从同一个根开始,它会快得多。基于丢失的(物理)噪声,我认为这次不涉及HDD,因此缓存了目录/文件结构。

我假设不是Total Commander缓存目录结构,或者是它?它似乎是我的操作系统功能,或硬盘驱动器缓存。

它在何处以及如何缓存呢?(即哪个组件的哪个机制,在哪个结构中?)系统如何知道缓存是否是最新的?如果它可以完全缓存,为什么默认情况下不缓存?

Answers:


3

我假设不是Total Commander缓存目录结构,或者是它?

可能不是。如果你有大量的文件,你可以看到相同的效果,如果你打开一个命令提示符并输入类似的东西dir c:\abc.def /s你可能没有任何具有该名称的文件,但是第一次完成比第一次需要更长的时间。如果你马上第二次运行它会需要。

它似乎是我的操作系统功能,或硬盘驱动器缓存。它在何处以及如何缓存呢?(即哪个组件的哪个机制,在哪个结构?)

Windows / NTFS将缓存项目,并且您的硬盘控制器中也会有一个缓存。

系统如何知道缓存是否是最新的?

因为写入硬盘的唯一方法是使用知道并因此更新或使缓存无效的例程。对于Windows,例程可能是NTFS设备驱动程序,而对于硬盘,它是磁盘控制器。

如果它可以完全缓存,为什么默认情况下不缓存?

因为缓存更适合用于其他事情。默认情况下缓存它意味着

  1. 每次计算机启动时,都必须读取并存储硬盘上每个文件的信息,无论是否需要它。这可以为您的启动时间增加几秒钟。人们拥有数百万个文件也很常见,这意味着时间可能会更长。

  2. 该内存不可用于缓存任何其他内容,尤其是您正在处理的文件。

  3. 如果您的个人资料/文档存储在服务器上会发生什么。您是否希望系统在通过网络提取所有文件的信息时等待?

还要记住,因为一切可以缓存,并不意味着它应该被缓存。有时可能需要更长时间才能访问较小缓存中的超大缓存中的信息,这意味着缓存过多实际上会降低您的速度。(我的意思是它比使用较小的缓存慢,但它仍然比使用没有缓存更快)


我想磁盘控制器会根据磁盘上“某个位置”的最后访问来缓存二进制数据,对吧?因为它不应该理解文件系统结构。此外,我希望HDD缓存相对较小,因此主要的“最重要的”缓存空间位于内核内存空间的某个地方,对吗?
n611x007 2013年

1
正确。HDD缓存通常比Windows小很多(通常大约为16或32 Mb),因此如果你有一百万个文件,那么HDD缓存就不足以将它们全部缓存。但是磁盘控制器中的缓存会更复杂,只记住磁盘上“某个位置”的东西,而不是缓存最活跃的扇区或块,所以如果你访问的目录恰好存储在扇区中/阻止它之前已缓存,它将能够更快地返回它。
sgmoore 2013年

0

你所指的是索引。大多数搜索任何东西都有一个随时间建立的索引,以加快搜索速度。开始 - >搜索有一个索引,TotalCommander似乎使用它自己,谷歌有一个可以通过谷歌找到的所有网页。

有多种方法可以加速索引和搜索文件系统。索引将比重新搜索和新的递归调用更快地通过目录挖掘。


1
我认为这不是Total Commander的指数。如果我关闭Total Commander然后重新打开它,搜索仍然很快。如果我关闭它,运行CCleaner并重新打开TC,搜索仍然很快。但是,如果我重新启动计算机,它会再次变慢。对我来说,这似乎是内存缓存。
n611x007 2013年

可能内置了一个版本,但是对于大型驱动器而言,将所有内容保留在内存中并不合理,特别是考虑到应用程序的使用年限。当TC首次引入RAM中的每个位时,看到它也有16位版本。如果,重启后缓存/索引重置,我会说临时文件是索引,或者ghisler已经建立了另一个签入。但是!我看到我的机器上的第一次搜索和第二次,第三次等搜索没有明显区别。i7,4GB RAM,SSD ...
Austin T French

在SSD(我也拥有一些)上,不可能重现令人印象深刻的结果,因为它不需要寻道时间,我想它甚至可以作为驱动器以不同的方式处理。但是为了消除TC我已经用os.walk制作了一个python脚本来对这个性能进行基准测试,并且在第一次和随后的搜索之间,有一个2个数量级的时间差异(即0.9对90秒)。
n611x007 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.