0

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

1 回答 1

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

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

于 2013-05-16T22:17:57.417 回答