2013-10-11 74 views
0

如果我需要經常從文件中讀取數據,並且使用fread將文件加載到unsigned char向量中,則隨後的fread非常快,即使unsigned char向量是閱讀後立即摧毀。Windows C++在內存中鎖定文件

在我看來,某些東西(Windows或磁盤)緩存文件,因此速度非常快。我還沒有讀過關於這種行爲的任何信息,所以我不確定這是什麼原因。

如果我不使用我的應用程序1小時左右,然後再做一次fread,fread會很慢。 在我看來,緩存已被清空。

有人可以向我解釋這種行爲嗎?我想積極使用它。 對於我來說這是一個問題,當fre are慢時。

內存映射的文件理論上工作,但文件本身太大,所以我不能使用它。

+2

Windows有一個磁盤緩存,它工作的很好。期待Windows將您的數據保留在緩存中幾小時/天並不是那麼友好。什麼使你的數據比系統上其他任何東西的數據更重要? –

+0

我需要快速執行freads,因此我試圖找到一種方法告訴Windows該文件對我來說很重要,我需要經常快速地訪問它。 – tmighty

+1

只是讀它......它會被緩存。只要你繼續閱讀它,窗口應該保持它的緩存。在從緩存啓動後,您只能慢速讀取ONCE。 –

回答

2

90/10定律

的計算機程序的執行時間

90%用於執行代碼

的10%,這不是一個規則,但通常是這樣,那麼如果可能的話,很多程序都會嘗試保留最新的數據,因爲很可能很快就會再次訪問這些數據。

Windows操作系統不是一個例外,接收命令後讀取文件操作系統保存一些關於文件的數據。它存儲程序存儲的年齡段的內存地址,如果可能的話,甚至可以在內存中存儲部分(甚至全部)二進制數據,這使得下一個文件的讀取速度要快於第一個。

所有功能於一切,你是正確的,有緩存的,但我不能說,這是怎麼回事,因爲我沒有在微軟的工作...


而且回答進入問題的下一部分。文件映射到內存中可能是解決方案,但如果文件非常大,機器可能沒有統計很多內存,所以它不會成爲一個選項。但是,您可以使用90/10法律。在你的情況下,你應該只將文件的一部分映射到內存中(這是最重要的部分),同時在閱讀時應該創建一個包含整體參數的數據表。

不知道確切的情況,但它可能會節省。