如何知道文件是否"存储在文件系统缓存中"

Mik*_*lah 8 cocoa caching

国家文件NSDataReadingOptions:

NSDataReadingUncached

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

这一切都有道理.我很好奇是否有办法知道文件是否已经存在于file-sysem缓存中.

例如,如果我需要执行大量文件读取,则优先读取已驻留在缓存中的文件可能是有意义的.

MrT*_*rTJ 4

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

  • iOS 的文件系统应该是分层文件系统(HFS),与 OS-X 的文件系统相同(参见iOS 文件系统 HFS?
  • HFS 使用统一缓冲区缓存 (UBC)
  • UBC 以块的形式缓存文件数据而不是整个文件 - 这是第一点,即使缓存了文件的一部分你也无法知道是否缓存了整个文件
  • 没有任何 API 或内核命令来控制 UBC 的内容(因此这回答了您的问题“否”)。

一些有趣的链接可供阅读:

  • 测试 UBC
  • 这个家伙试图在(越狱的)iPhone 下获取有关 UBC 内容的一些信息
  • 文档中提到的对文件系统缓存的唯一控制是您也发现的相同标志。

确保快速访问文件的选择是将文件映射到虚拟内存的页面上,如 Apple 的同一文档中所述。