【发布时间】:2012-12-08 16:44:40
【问题描述】:
我有一个大的二进制文件(大约 1 GB),我想按顺序处理它。我正在使用内存映射文件来访问该文件。有没有办法告诉 Windows 尽快交换整个文件?目前,每次出现页面错误时,windows 似乎只加载一个页面,从而导致处理速度非常慢。
【问题讨论】:
-
为什么不自己把整个文件加载到内存中呢?
-
您对瓶颈的分析听起来不可信。无论如何,内存映射文件在这里都是大材小用。对流进行顺序文件处理。您需要一个维护自己的缓冲区的流,以便您可以大块地访问 OS 读取功能。
-
@Steve-o:很多原因:我想修改文件的一部分——如果它是一个映射文件,那就容易多了。第二次读取文件意味着等到整个文件都在内存中再处理它。通过使用 MMF,我可以在它仍在读取时开始处理(可能使用异步 IO,但更难做到)。第三,如果没有足够的 RAM,完全读取文件将意味着大量非常低效的交换。
-
@DavidHeffernan:我可以进行流处理,但如果我能找到一种尽快加载 MMF 的方法,它的代码会更复杂,效率也会更低。但这与问题无关,所以我没有在问题中提及。
-
它不会变得更复杂,当然也不会降低效率。无论如何,我严重质疑您对问题的诊断。