我需要在啓動時讀取幾千個小文件的內容。在Linux上,只使用fopen和閱讀速度非常快。在Windows上,這發生得非常緩慢。如何使CreateFile儘可能快
我已經切換到使用ReadFileEx的重疊I/O(異步I/O),其中Windows在數據準備好讀取時執行回調。
但是,CreateFile本身的實際數千次調用仍然是一個瓶頸。請注意,我提供自己的緩衝區,打開NO_BUFFERING標誌,提供SERIAL提示等。但是,對CreateFile的調用需要幾十秒的時間,而在Linux上,所有操作都要快得多。
有什麼可以做的,讓這些文件準備好更快地閱讀?
到的CreateFile的調用是:
hFile = CreateFile(szFullFileName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
瓶頸可能是文件系統,是否可以使用平面文件而不是讀取數千個小文件? – tenfour
Windows在處理一個目錄中的大量文件時出了名,如果這是您的情況。多線程的東西是一個選項,所以你會有10個線程在讀取concur? – eran
你應該看看這個問題http://stackoverflow.com/questions/197162/ntfs-performance-and-large-volumes-of-files-and-directories –