2011-09-07 108 views
8

该文档为NSDataReadingOptions状态:如何知道如果一个文件被“存储在文件系统缓存”

NSDataReadingUncached

指示文件中的提示不应该被存储在文件系统缓存。对于正在读取和丢弃的数据,此选项可以提高性能。

这一切都有道理。我很好奇,如果有办法知道文件是否已经驻留在文件sysem缓存中。

例如,如果我需要执行大量的文件读取操作,优先考虑读取已存在于缓存中的文件可能是有意义的。

+1

重点背后的想法是什么?您需要读取100个文件,10个读取时间为1秒,90个未读取,2个读取时间。无论阅读顺序如何,您总会发现需要190秒才能阅读全部内容。 –

+2

啊,但如果我碰巧先读取未缓存的内容,将其他内容从缓存中删除,那么所有内容都会取消缓存,总共花费200s –

回答

4

恐怕我们在这里只能传达一些假设,因为没有官方文档可用。

  • 的IOS文件系统被认为是分层文件系统(HFS)相同的OS-X之一(见iOS filesystem HFS?
  • HFS使用统一缓冲区高速缓存(UBC)
  • UBC缓存在文件中的数据而不是整个文件 - 这是第一点,即使文件的一部分被缓存,你可以不知道整个文件是否被缓存
  • 没有任何API或内核命令控制UBC的内容(所以这回答你的问题无线否)。

一些有趣的链接阅读:

你的选项,以确保文件可以快速访问是在苹果的同一文档中描述的文件映射到虚拟内存的页面。

+0

对不起,有人添加了令人困惑的标记,我对此感兴趣所有Cocoa平台,而不仅仅是iOS。尽管如此,我认为它们在这种情况下表现相同,因为文件系统基本相同。 –

+0

所以当你说没有API来控制UBC的内容时,你是否包含任何类型的检查作为该权利的一部分?即我不想以任何方式编辑缓存,只是找到关于它的一些信息;也没有API,对吧? –

+0

我从iOS的角度回答。在该操作系统下,肯定没有公共API来收集有关缓存的更多信息。我收集了所有不在NDA之下的公开信息。 – MrTJ