【发布时间】:2010-05-04 10:52:21
【问题描述】:
我们的应用程序是内存密集型的,并且处理读取大量磁盘文件。总负载可能超过 3 GB。
有一个自定义的内存管理器,它使用内存映射文件来实现读取如此庞大的数据。这些文件仅在需要时才映射到进程内存空间,这样进程内存就得到了很好的控制。但是观察到的是,通过内存映射,系统缓存不断增加,直到它占用可用的物理内存。这会导致整个系统变慢。
我的问题是如何防止系统缓存占用物理内存?我试图删除文件缓冲(通过使用 FILE_FLAG_NO_BUFFERING ),但是这样,读取操作会花费大量时间并降低应用程序性能。如何在不牺牲太多性能的情况下实现可扩展性。这种情况下常用的技术有哪些?
我对 WinXP 操作系统的缓存行为不太了解。任何解释相同内容的好链接也会有所帮助。
【问题讨论】:
-
您是否一次将整个文件映射到内存中?对于大文件,您应该映射较小的视图。
-
是的,我正在映射整个文件,但文件通常为 1MB。并且它们仅在需要时才被映射并在以后取消映射。取消映射不会导致系统缓存被释放。它一直在积累。
标签: caching winapi file-io windows-xp