C# Parallel.Foreach正在重写System.IO.File操作&;引起错误
我在C#.NET中有一个windows服务代码,下面是这个代码。我正在尝试在包含10000或50000个文件的大文件数组中编写parallel.foreach中的pdf。MaxDegreeOfParallelism设置为10,以便以更快的方式并发或并行创建文件 但是我在File.writealBytes行上收到了错误,它说进程无法访问文件“Hello.pdf”,因为它正被另一个进程使用。 文件数组中的数据是唯一的。文件名在整个数组集中是唯一的 我觉得很平行。Foreach正在创建多个线程,但它在文件数组数据上不是原子的 请建议如何解决这个问题,或者让我知道如何更好地使用Parallel.ForeachC# Parallel.Foreach正在重写System.IO.File操作&;引起错误,c#,asp.net,windows-services,C#,Asp.net,Windows Services,我在C#.NET中有一个windows服务代码,下面是这个代码。我正在尝试在包含10000或50000个文件的大文件数组中编写parallel.foreach中的pdf。MaxDegreeOfParallelism设置为10,以便以更快的方式并发或并行创建文件 但是我在File.writealBytes行上收到了错误,它说进程无法访问文件“Hello.pdf”,因为它正被另一个进程使用。 文件数组中的数据是唯一的。文件名在整个数组集中是唯一的 我觉得很平行。Foreach正在创建多个线程,但它在
ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 10
Parallel.ForEach(files, po, newpath =>
{
try
{
byte[] bytes = File.ReadAllBytes(newpath);
File.WriteAllBytes(newpath.ToString().Replace(sourcePath, destinationPath), bytes);
Array.Clear(bytes, 0, bytes.Length);
Interlocked.Increment(ref count);
}
catch (Exception ex)
{
TraceLog.WriteTrace("Failed copy this file: " + newpath.ToString() + " " + ex.Message + ex.StackTrace);
}
}
它是随机的,有时只会导致问题
文件的内容是什么?它是否包含重复的文件路径
?文件数组中没有重复项。我也检查过了。你能用一些示例值来丰富你的代码吗。G对于newpath
和destinationPath
?您是否总是使用file.ReadAllBytes()
读取同一个文件?实际上并不相关,但为什么要调用Array.Clear(bytes,0,bytes.Length)代码>?这是毫无意义的。也联锁。增量(参考计数)代码>-那是干什么用的?