【发布时间】:2020-09-01 11:26:21
【问题描述】:
较旧的、现已弃用的 macOS 文件系统 API 提供了用于读取无缓冲文件的标志。
我寻求一种现代方法来完成同样的任务,这样我就可以将文件的数据读入内存,而不会不必要地缓存在内存中的其他地方(例如卷缓存)。
例如,使用fread 阅读并首先调用setvbuf (fp, NULL, _IONBF, 0) 在我的测试中没有达到预期的效果。我正在寻找其他低级函数,可以让我读入准备好的内存缓冲区并避免缓冲整个数据。
背景
我正在编写一个文件搜索程序。它读取大量文件内容(许多 GB),否则用户不会使用这些内容。将所有这些数据缓存在卷缓存中将是一种浪费,因为无论如何它很快就会被进一步的读取清除。它还可能导致清除用户或系统实际使用的文件数据,从而导致更多的缓存未命中。
因此,我应该能够告诉系统我不需要缓存文件数据。集群边界所需的少量缓存不是问题。这是我短暂读入内存以搜索它的许多大块,不需要缓存。
【问题讨论】:
标签: objective-c swift macos filesystems