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*/
});

また、プロパティを設定できるForEach3 番目のパラメーターを取るのオーバーロードを検討することもできます。ParallelOptionsMaxDegreeOfParallelism

ループ本体で実行している「もの」はすべてスレッドセーフである必要があることに注意してください。つまり、(このコンテキストでは) 異なるアイテムに対して同時に複数回実行されている場合に適切に動作することを意味します。

于 2013-05-16T22:17:57.417 に答える