Parallel.For复制文件

时间:2013-05-16 22:13:37

标签: vb.net

我有一个在本地驱动器上非常快速地复制文件的操作,但是当它在服务器上运行时,它可能会大大减慢速度。我有一个想法,也许我可以把它扔在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

1 个答案:

答案 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属性。

请注意,您在循环体中所做的任何“东西”都需要是线程安全的,这意味着(在此上下文中)如果它同时为不同的项目运行多次,它的行为是正确的。