2010-12-16 53 views
0

的,我想知道方法File.ReadAllText 這裏的行爲我的代碼示例:File.ReadAllText利用CACHE

uxJavaScriptTinyMCEDisplayer.Text = File.ReadAllText(Server.MapPath("TinyMCEJavaScriptAdmin.txt")); 

File.ReadAllText有一些緩存行爲?所以第一次讀取文件時,會保存在內存中,而不是再次重新讀取?

謝謝

+2

這取決於您的操作系統。根據內存條件和文件大小,它可能會在內存中緩存一段時間,但不應該依賴它。 – 2010-12-16 12:18:04

+0

@Frédéric我剛剛用Reflector檢查了ReadAllText方法的源代碼,並且無法在任何地方看到任何緩存,只是將它追蹤爲調用'kernel32.dll'中的'ReadFile'方法 - 可以緩存哪些條件? – 2010-12-16 12:22:29

+1

@Shadow Wizard,我的意思是操作系統本身執行緩存,比ReadFile()更低。原始磁盤讀取可以保存在內存中,以便後續對相同數據的讀取請求不需要打到磁盤。 – 2010-12-16 12:25:51

回答

3

在.Net中沒有直接緩存,但是,您通過操作系統間接獲得緩存行爲。

Windows非常適合緩存內存中的文件內容,並且有一個便於文件系統內容在內存中緩存的層。但正如Frédéric在他的評論中指出的那樣,你不應該將這種行爲視爲內存壓力,緩存老化等等,這可能意味着緩存內容被丟棄。

如果有足夠的內存,操作系統可以很好地緩存。

更新

這是一個老的文章(Win2K系統),但給出了一些想法,OS磁盤緩存。

http://technet.microsoft.com/en-us/library/bb742613.aspx

+0

感謝您的幫助 – GibboK 2010-12-16 13:20:27

1

沒有緩存。它將讀取給定路徑中文件的當前內容。