我有一个在本地驱动器上非常快速地复制文件的操作,但是当它在服务器上运行时,它可能会大大减慢速度。我有一个想法,也许我可以把它扔在Parallel.For。可能吗?以下是我的代码。
Dim FilesToCopy As HashSet(Of String) = New HashSet(Of String)
'FilesToCopy holds the files names that will be copied because
'the "copy" folder can have hundreds of files, but only a small subset will be copied
For Each Item In FilesToCopy
FileName = My.Computer.FileSystem.GetName(Item)
Splitter = Regex.Split(FileName, "_", RegexOptions.IgnoreCase)
ThisHour = Integer.Parse(Splitter(9).Substring(0, 2)) + 1
My.Computer.FileSystem.CopyFile(String.Concat(GrabPath, "\", Item), String.Concat(DropPath, "\", _
StaticFileName, ThisHour.ToString, ".NETLOSS"), FileIO.UIOption.OnlyErrorDialogs, UICancelOption.ThrowException)
SBuilder.AppendLine(String.Concat(StaticFileName, ThisHour.ToString, ".NETLOSS"))
LogFile.WriteLine(String.Concat("INFO The following file (", Item, ") was copied from the ", GrabPath, _
" folder to the ", DropPath, " folder."))
Next
答案 0 :(得分:1)
Parallel.ForEach
就是你想要的。由于我不知道VB.NET语法,我将给出一个C#版本。我希望你能听懂。
转过来:
foreach (var Item in FilesToCopy)
{
/*do stuff using Item*/
}
进入这个:
Parallel.ForEach(FilesToCopy, Item =>
{
/*do stuff using Item*/
});
您可能还需要考虑ForEach
的重载,该重载采用第三个ParallelOptions
参数,您可以设置MaxDegreeOfParallelism
属性。
请注意,您在循环体中所做的任何“东西”都需要是线程安全的,这意味着(在此上下文中)如果它同时为不同的项目运行多次,它的行为是正确的。