自Mac OS X出现之前,我们已经能够要求Finder 计算所有大小,以便确定所涉及的Finder窗口的每个文件夹中包含的可读文件大小空间的总和。
我已经测试了几台Mac上文件夹的列表视图大小,无论是否存在SSD都没有关系,但是Lion计算速度如此之快,我很好奇是否有一些新的缓存数据结构,或者Finder是否正在使用来自Spotlight或类似数据库的元数据信息,从而极大地加快了计算速度。
自Mac OS X出现之前,我们已经能够要求Finder 计算所有大小,以便确定所涉及的Finder窗口的每个文件夹中包含的可读文件大小空间的总和。
我已经测试了几台Mac上文件夹的列表视图大小,无论是否存在SSD都没有关系,但是Lion计算速度如此之快,我很好奇是否有一些新的缓存数据结构,或者Finder是否正在使用来自Spotlight或类似数据库的元数据信息,从而极大地加快了计算速度。
Answers:
我还没有观察到Lion在第一次计算文件夹中的尺寸时,在计算文件夹(和包装/捆)尺寸时会更快。但是,同一文件夹中的后续计算似乎确实要快得多。
快速感知的部分原因可能是Finder在重新计算文件夹大小时将立即以灰色文本显示先前计算出的大小,而不是在计算出之前显示“-”。重新计算文件夹的大小后,该数字将更新(如果大小已更改)并变黑。
因为Finder可观察地缓存先前计算的文件夹大小,所以很可能只重新计算自上次计算以来已更改的文件夹的大小。
在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开始,此行为已得到纠正,“文件大小”列现在将显示每个文件的确切文件大小,而不是它在硬盘上分配的大小(无论如何,这取决于文件系统)。
由于这些大小与您从ls
Terminal中的二进制数获得的数字相同,因此它们的计算效率更高。
stat(2)
通话不负责检索两个号码吗?而且ls(1)
根本没有显示捆绑包/包装/文件夹的实际大小,因此我不知道为什么这很重要。
ls
显示的文件大小适合常规文件。stat
可以对单个文件执行相同的操作。我的观点是,现在仅需要捆绑软件/软件包/文件夹的大小,而不再需要常规文件来计算捆绑软件/软件包/文件夹的大小所需的“额外工作”。
ls
显示的是常规文件的文件大小,而不是捆绑文件(这就是我所说的)。它通过调用来实现stat
。以前,常规文件需要什么“额外工作”?一次stat
调用将返回块(st_blocks
)和字节(st_size
)。
从OS X Lion开始,Apple添加了SQLite数据库,该OS用来在系统功能(如Spotlight)中进行文件跟踪。从SQLite数据库中查询而不是每次都检查文件系统很有可能是性能提高的原因。John Siracusa的OS X Lion审查深入解释了Lion中文件系统的更改。特别是在这里,您将找到有关新SQLite数据库的说明。
希望这可以帮助。