2011-10-12 106 views
0

我的問題是應用程序花費太長時間才能加載數千個文件。是的,我知道這需要很長時間,但我希望能夠在任何時間內加快速度。我的意思是「加載」是打開文件來獲取它的描述符,然後讀取它的前100個字節左右。如何快速打開並讀取1000個文件

所以,我的主要策略是創建第二個線程,打開和關閉所有文件(不讀取任何內容)。這似乎有幫助,因爲線程在主線程之前運行,我猜操作系統提前緩存這些文件描述符,以便當我的主線程打開它們時,它是快速打開的。這實際上有所幫助,因爲線程可以開始緩存這些文件描述符,而我的主線程正在解析從這些文件讀入的數據。

所以我真正的問題是......我還能做些什麼來提高速度?有什麼方法?有沒有人有過這樣的成功?

我聽說過OS預取調用,但它是虛擬內存頁面。有沒有辦法告訴操作系統,嘿,我將很快需要所有這些文件 - 我建議你提前爲我收集它們。我的lookahead線程非常粗糙。

我可以使用低級磁盤技術嗎?有沒有可能有助於文件訪問的模式?現在,加載的文件都來自同一個文件夾。我想沒有辦法確定磁盤上的確切位置,以及打開文件的順序對於磁盤來說是最快的。我也猜測這個磁盤有一些硬件可以使這個儘可能高效。

我的應用主要是針對windows,但是unix的建議也會有幫助。

我用C++進行編程,如果這有所作爲。

感謝, -julian

回答

0

我首先想到的是,這將是很難從程序層面解決。

你會發現Linux和OSX可以在幾分之一的時間內訪問像這樣的數千個文件。我不知道你對機器有多少控制。如果您可以將數千個文件保存在FAT分區上,您應該看到比使用NTFS更好的結果。

掃描這些文件的頻率以及它們多久發生一次更改。如果這個比例在閱讀方面很重要,那麼將每個文件的開頭複製到一個緩存中是有意義的。緩存可以存儲文件名,修改時間和每個文件的100個字節。