是什么改变了Lion中的Finder列表视图,以使“计算所有尺寸”以指数级速度更快?


10

自Mac OS X出现之前,我们已经能够要求Finder 计算所有大小,以便确定所涉及的Finder窗口的每个文件夹中包含的可读文件大小空间的总和。

Finder-列表视图-显示视图选项-计算所有大小

我已经测试了几台Mac上文件夹的列表视图大小,无论是否存在SSD都没有关系,但是Lion计算速度如此之快,我很好奇是否有一些新的缓存数据结构,或者Finder是否正在使用来自Spotlight或类似数据库的元数据信息,从而极大地加快了计算速度。


1
你从哪儿得到那扇窗户的?基于底部的“用作默认值”按钮,它看起来像“显示视图选项”窗口(<kbd>⌘J</ kbd>),但底部没有显示任何内容。
Cajunluke 2012年

1
@CajunLuke,您需要在打开“显示视图选项”窗口之前将窗口视图切换到列表。
2012年

Answers:


3

我还没有观察到Lion在第一次计算文件夹中的尺寸时,在计算文件夹(和包装/捆)尺寸时会更快。但是,同一文件夹中的后续计算似乎确实要快得多。

快速感知的部分原因可能是Finder在重新计算文件夹大小时将立即以灰色文本显示先前计算出的大小,而不是在计算出之前显示“-”。重新计算文件夹的大小后,该数字将更新(如果大小已更改)并变黑。

因为Finder可观察地缓存先前计算的文件夹大小,所以很可能只重新计算自上次计算以来已更改的文件夹的大小。


我认为这是问题的核心。缓存要好得多,并且部分或过时的结果将逐渐显示。我不能说是否对算法进行了调整以填充可见的数据,但是仅凭高速缓存似乎就可以满足我在实践中如何工作的乐趣。
bmike

经过几个月的仔细观察,您完全正确。现在,缓存机制非常好,以至于在我使用了一段时间的Mac上,这些数据几乎总是正确且即时的。由于操作系统必须完全收集信息,因此仅在重新安装或联盟后不久才在新的Mac上才可以看到较早的速度。
bmike

7

在Lion之前,Finder.app中的“文件大小”列将显示硬盘上每个文件所需的大小,而不是确切的文件大小。例如,1字节文件显示为4 KB,因为它们实际上在HFS格式的系统上占用4 KB的空间。除了打开File› Get Info(或使用其他应用程序,如Terminal.app然后使用ls -lsa,或使用Finder.app替代项,如TotalFinder.app),没有简单的方法来查看1字节的实际文件大小。

(回想一下,我在bugreport.apple.com上将此报告为错误8926275。)

从Lion开始,此行为已得到纠正,“文件大小”列现在将显示每个文件的确切文件大小,而不是它在硬盘上分配的大小(无论如何,这取决于文件系统)。

由于这些大小与您从lsTerminal中的二进制数获得的数字相同,因此它们的计算效率更高。


1
这也是很棒的细节。随着SSD变得越来越普遍,并且快照的存储变得越来越复杂,我想这已经是很久了,因为不再担心文件的特定实例要占用多少空间,而只担心文件的逻辑大小而不是物理大小。
bmike

我不明白 效率如何?一次stat(2)通话不负责检索两个号码吗?而且ls(1)根本没有显示捆绑包/包装/文件夹的实际大小,因此我不知道为什么这很重要。
2012年

@Ken ls显示的文件大小适合常规文件。stat可以对单个文件执行相同的操作。我的观点是,现在仅需要捆绑软件/软件包/文件夹的大小,而不再需要常规文件来计算捆绑软件/软件包/文件夹的大小所需的“额外工作”。
Mathias Bynens 2012年

Mathias:是的,ls显示的是常规文件的文件大小,而不是捆绑文件(这就是我所说的)。它通过调用来实现stat。以前,常规文件需要什么“额外工作”?一次stat调用将返回块(st_blocks)和字节(st_size)。
2012年

1

如果他们使用Spotlight元数据来缓存文件大小,我不会感到惊讶。如果您已经在使用FSEvents跟踪文件系统中的所有更改,并且(可能)使用Time Machine备份所有这些更改,则可以忽略计算和存储聚合文件大小的额外费用。


我将查看是否可以获取fs_events来溢出bean(如果它是元数据)。我很喜欢读取聚光灯数据-但还没有直接的证据。
bmike

1

从OS X Lion开始,Apple添加了SQLite数据库,该OS用来在系统功能(如Spotlight)中进行文件跟踪。从SQLite数据库中查询而不是每次都检查文件系统很有可能是性能提高的原因。John Siracusa的OS X Lion审查深入解释了Lion中文件系统的更改。特别是在这里,您将找到有关新SQLite数据库的说明

希望这可以帮助。


这是一个非常不错的链接,但是SQLite数据库出现在我的所有Mac电脑上,仅用于跟踪版本仅占驱动器总文件一小部分的文档。如果您可以找到指向存储所有文件大小的数据库的链接,那么至少可以说这很有趣,因为文件系统已经是执行此操作的数据库,不是吗?
bmike
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.