嗨我正在使用多線程將多個文件從源複製到多個網絡目標,每個線程將大量文件複製到不同的網絡! 我使用.NET File.Copy(...) 我看到100%的使用上只有一個網絡,每一個時刻C#File.Copy到多個網絡目的地塊其他線程
來自網絡的100%變化至網絡。
我試圖目的地更改爲本地一個,然後我看到平衡字節拷貝過來的所有主題
我試圖運行10個進程(每一個到不同的目的地),而不是10線程,那麼我可以100%使用全部10個網絡。
我使用.net 4.5 有什麼想法嗎?
嗨我正在使用多線程將多個文件從源複製到多個網絡目標,每個線程將大量文件複製到不同的網絡! 我使用.NET File.Copy(...) 我看到100%的使用上只有一個網絡,每一個時刻C#File.Copy到多個網絡目的地塊其他線程
來自網絡的100%變化至網絡。
我試圖目的地更改爲本地一個,然後我看到平衡字節拷貝過來的所有主題
我試圖運行10個進程(每一個到不同的目的地),而不是10線程,那麼我可以100%使用全部10個網絡。
我使用.net 4.5 有什麼想法嗎?
試着這麼做:
List<String> fileList = new List<string>();
fileList.Add("TextFile1.txt");
fileList.Add("TextFile2.txt");
Parallel.For(0, fileList.Count, x =>
{
File.Copy(fileList[x], @"C:\" + fileList[x]);
}
);
變動c:\以符合您的多個目的地。如果您提供原始代碼,我們可以做更多。
我建議你用異步/等待模型替換線程(適用於CPU綁定操作),這對於IO綁定操作來說表現極佳。
讓我們改寫File.Copy操作
public static async Task Copy(string src, string dest)
{
await Task.Run(() => {
System.IO.File.Copy(src, dest);
});
}
您可以調用方法如下片斷調用它。
var srcPath = "your source location";
var dstPath = "your destination location";
foreach(var file in System.IO.Directory.EnumerateFiles(srcPath))
{
var dstFile = System.IO.Path.Combine(dstPath, System.IO.Path.GetFileName (file));
Copy (file, dstFile);
}
現在,您可以簡單地用src和目標路徑將此方法儘可能快地泵出。你的限制將是IO速度(磁盤/網絡等),但你的Cpu將大部分是免費的。
你能提供任何代碼嗎? – icbytes
它真的只是File.Copy,目的地是網絡之一(\\ 10.161.1.1 \ ...) – user5287071
你肯定似乎有錯誤編碼產卵你的線程,正如你在開始時提到的,100次使用是每個一次一個網絡。 – icbytes