我需要找到一種儘可能快地讀取大量小文件(大約300k文件)的方法。使用線程提高磁盤讀取性能(多個文件)
使用FileStream順序讀取它們並在一次調用中讀取整個文件需要170到208秒(您知道,重新運行時,磁盤緩存起着其作用並且時間會有所不同)。
然後我嘗試使用PInvoke與CreateFile/ReadFile和使用FILE_FLAG_SEQUENTIAL_SCAN,但我不明白任何更改。
我嘗試了幾個線程(將大集合分成大塊,並讓每個線程都讀取它的部分),這樣我就能夠提高速度(即使每個新線程達到4個也不會有5%的速度) )。
關於如何找到最有效的方法做到這一點的任何想法?
假設您正在讀取常規硬盤,則使用的線程越多,物理磁盤磁頭越需要尋找不同的磁道,而不是一次只返回一個文件。因此,除了在後臺線程上執行此操作以保持應用程序在主線程上的響應外,我還是會避免使用任何多線程。另外,請看看您的硬盤規格:一旦達到最大持續吞吐量,不需要調整代碼量就可以提供幫助 - 您需要更多的硬件。 – Jono 2010-04-24 11:28:21
喬諾明白了。您的硬盤受到硬件限制。獲得最大吞吐量的方法是儘量減少磁盤磁頭運動浪費的時間,因此一次只能讀取一個文件。如果您可以安排每個文件在磁盤上連續存在,應該有所幫助。 – 2010-04-24 21:17:47