2014-01-30 34 views
1

Windows文件高速緩存,如下所述:例如File.ReadAllText()利用Windows文件緩存?

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364218(v=vs.85).aspx

默認情況下,Windows緩存是從磁盤讀取和 寫入到磁盤上的文件數據。這意味着讀取操作從系統內存中的一個區域讀取文件數據 ,稱爲系統文件高速緩存,而不是從物理磁盤中讀取 。

我有一個C#應用程序,它以非常頻繁,快速的方式從磁盤讀取文件。我應該擔心編寫自己的「文件緩存」機制,還是Windows會爲我處理?當使用Process Explorer觀察我的應用程序時,即使我一遍又一遍地讀取相同的靜態文件,但在操作過程中仍然會注意到很多磁盤I/O。難道Windows緩存管理器只是告訴操作系統磁盤IO正在發生,實際上是從內存中的緩存中讀取文件?

+1

你不需要擔心。這就是爲什麼1000個智能開發人員編寫Windows操作系統的原因,所以您只需執行'File.ReadAllText()'。如果你想訪問文件,例如一個沒有被修改的模板,是的,你可以將它存儲在內存中並讀取內存。但爲此,您需要注意緩存。對於框架<= 3.5使用Enterprise Library 5緩存塊。對於4.0 - system.runtime.caching或appFabric等等,等等 –

回答

1

在我知道的所有操作系統中,文件系統操作默認啓用緩存,Windows包括在內。如果執行File.ReadAllText將其禁用,我會很驚訝,因爲它具有相當大的性能優勢。

文件系統緩存速度很快,但自定義緩存可以專門構建,因此速度更快。

例如,ReadAllText需要將文件解碼爲string - 文件系統緩存不會幫助您。您也可以保留相同的實例,以便訪問它的所有應用程序引用相同的副本。這給你的CPU緩存更好的跳過主內存的機會。分配較少也意味着GC壓力降低。

您是否需要自己的第二層緩存?也許,也許不是 - 您應該先編寫最簡單的代碼,然後在測量之後嘗試優化它,如果它是瓶頸。