可能重複:
How to invalidate the file system cache?如何在Windows下刷新磁盤讀取緩存?
爲了能夠使一些基準,我需要清理的Windows磁盤讀取緩存。我怎樣才能做到這一點?
其實我是想,如果加載一個大的Unicode文件從磁盤(UTF-8或UTF-16)是快還是不行,考慮到在記憶我保存UTF-16進行比較。
我知道它應該沒有顯着差異,但爲了進行基準測試,我需要確保該文件沒有被緩存 - 我需要查看磁盤上的大小是否比解碼文件有更多或更少的影響。
可能重複:
How to invalidate the file system cache?如何在Windows下刷新磁盤讀取緩存?
爲了能夠使一些基準,我需要清理的Windows磁盤讀取緩存。我怎樣才能做到這一點?
其實我是想,如果加載一個大的Unicode文件從磁盤(UTF-8或UTF-16)是快還是不行,考慮到在記憶我保存UTF-16進行比較。
我知道它應該沒有顯着差異,但爲了進行基準測試,我需要確保該文件沒有被緩存 - 我需要查看磁盤上的大小是否比解碼文件有更多或更少的影響。
我發現的唯一的解決辦法,到目前爲止是http://chadaustin.me/2009/04/flushing-disk-cache/但那些需要太多的時間,所以我希望我們能找到一個更好的。
AFAIK,這是不幸的是沒有可能丟棄的讀取Windows下緩存。我花了一些時間尋找到這個幾年前,只發現瞭如何沖洗的寫緩存。
在我看來,你有三種選擇,除非別人已經發現了一些魔法:
編輯:它確實有可能刷新讀緩存,至少在Vista和更高版本:Disable or flush page cache on Windows。不過,它需要調用未記錄的NtSetSystemInformation
NT API。另外,對於單個文件,只需打開指定的FILE_FLAG_NO_BUFFERING
並再次關閉句柄即可刷新讀取緩存。從微軟
請注意,Sron Sbarnea答案中的'flushmem'實現瞭解決方案3.它可以工作,但分配這麼多內存顯然非常慢(可能是因爲它會導致大量的分頁/交換)。 – sleske 2010-08-30 10:51:59
@sleske:是的,這不是一個漂亮的解決方案 - 它迫使Windows修剪所有進程的工作集,做頁面交換......然後通常會立即進行頁面活動。 – snemarch 2010-08-30 11:01:18
'請注意,Sron Sbarnea答案中的flushmem實現瞭解決方案3.它可以工作,但分配這麼多內存顯然非常慢(可能是因爲它會導致大量的分頁/交換)。「更不用說它可能會導致系統崩潰。我運行它,Chrome(包括這個頁面)剛剛消失。衛生署!幸運的是,當我運行Chrome時,它讓我恢復了會話,所以這只是一個小小的不便。儘管如此,被建議是安全的,你應該在使用它之前退出所有的東西(這當然是一個糟糕的解決方案)。 ': - /' – Synetech 2013-12-01 00:59:31
有人幫我這個在幾年前(在Windows XP的天回),並給了我,當時遇到了我的需求的解決方案。我的機器中已經有兩個驅動器,我需要測試的東西已經放在D驅動器上,幸運的是,當我想要刷新緩存時,我不需要在D驅動器上保留任何文件。在Windows磁盤管理界面中,我可以將我的D:驅動器盤符更改爲另一個盤符,然後再重新啓動,並且D驅動器將執行操作,就好像在操作系統中有一個冷藏緩存。
你在找什麼也被稱爲「丟棄緩存」。在Linux下,你可以通過寫入'/ proc/sys/vm/drop_caches'來完成。不知道Windows雖然... – sleske 2010-08-26 10:50:51
@Mehrdad你確實意識到這個問題,如果從2010年和2011年的一個? – Jack 2012-12-14 00:37:32
@Jack:是的,對不起,我確實做到了,但在同一時間,我的答案posteed這個問題上的其他問題在幾個月前......所以無論這個問題應該被關閉,因爲這一個愚弄的人,或者相反。我決定選擇後者,因爲當我谷歌搜索時,我看到*噸這個問題的副本(很多來自2010年),並認爲將它們全部標記爲一個愚蠢的問題比嘗試將它少很多,在StackOverflow上找到這個問題的最早副本(有噸)。 :\ Sorry .. – Mehrdad 2012-12-14 00:58:35