我試圖用下面的兩個解決方案複製200個文件,但我沒有看到差異(我用System.Diagnostics.Stopwatch
來衡量時間)。在這兩種情況下,花費了8秒。第二個(並行)解決方案不應該更快嗎?我以爲是因爲它是使用Parallel的IO操作會加速複製。是否應該有差異來並行而不是並行地複製文件?
我失蹤了什麼?
// Case1 - Regular iteration
foreach (FileInfo file in files)
{
string temppath = Path.Combine(destDirName, file.Name);
file.CopyTo(temppath, false);
}
// Case2 - Parallel
Parallel.ForEach(files, file =>
{
string temppath = Path.Combine(destDirName, file.Name);
file.CopyTo(temppath, false);
});
實際上,並行化磁盤IO很有可能導致**速度下降**。當同時複製兩個文件時,磁盤需要從兩個文件中讀取,即從完全不同的位置讀取。當一個接一個地複製它們時,您可以完全讀取每個文件 - 而不必讀取大量不同的區域。 – ThiefMaster
好吧,可能是一個有趣的時間來嘗試這與高延遲網絡驅動器。 –
..並在池中使用可配置數量的線程。 –