您好我使用多线程将许多文件从源复制到多网络目的地,每个线程将大量文件复制到不同的网络! 我使用.net File.Copy(...) 我看到100%仅在一个网络上使用,每一刻
从网络到网络的100%变化。
我尝试将目的地更改为本地目的地,然后我看到平衡字节复制到所有线程
我尝试运行10个进程(每个进程到不同的目标)而不是10个进程,然后我100%使用全部10个进程。
我使用.net 4.5 任何想法?
答案 0 :(得分:0)
我建议你用async / await模型替换线程(适用于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将大部分是免费的。
答案 1 :(得分:-1)
答案 2 :(得分:-1)
尝试类似:
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:\以匹配您的多个目的地。如果您提供原始代码,我们可以做更多。