我們的應用程序是內存密集型的並且處理讀取大量磁盤文件。總負載可能超過3 GB。WinXP中的文件和系統緩存行爲的內存映射
存在使用內存映射文件來實現這樣一個龐大的數據讀取自定義的內存管理器。這些文件只有在需要時才映射到進程內存空間,並且這樣進程內存就可以得到很好的控制。但是觀察到的是,使用內存映射時,系統緩存不斷增加,直到它佔用可用的物理內存。這導致整個系統的放緩。
我的問題是如何防止系統緩存佔用物理內存?我試圖刪除文件緩衝(通過使用FILE_FLAG_NO_BUFFERING),但是由此,讀取操作需要相當長的時間,並且會降低應用程序的性能。如何在不犧牲性能的情況下實現可擴展性。在這種情況下使用的常用技術是什麼?
我沒有WinXP的操作系統緩存行爲有很好的理解。任何解釋相同的好鏈接也會有所幫助。
您是否將整個文件一次映射到內存中?對於大文件,您應該映射較小的視圖。 – 2010-05-04 20:18:10
是的,我正在映射整個文件,但文件通常是1MB。並且只有在需要時才映射它們,稍後再映射它們。取消映射不會導致系統緩存被釋放。它不斷積累。 – Canopus 2010-05-05 03:29:22