Büyük bir dosya satırını okuyan, onunla bir mantık oluşturan ve bir dosyaya yazmam gereken bir dize döndüren bir görevim var. Çıkışın sırası önemli değil. Ancak, aşağıdaki kodu denediğimde, dosyamın 15-20k satırlarını okuduktan sonra durur/yavaşlar.Parallel.ForEach kullanarak bir dosyaya nasıl doğru yazılır?
public static Object FileLock = new Object();
...
Parallel.ForEach(System.IO.File.ReadLines(inputFile), (line, _, lineNumber) =>
{
var output = MyComplexMethodReturnsAString(line);
lock (FileLock)
{
using (var file = System.IO.File.AppendText(outputFile))
{
file.WriteLine(output);
}
}
});
Programım neden bir süre çalıştıktan sonra yavaşlıyor? Bu görevi gerçekleştirmenin daha doğru bir yolu var mı?
Eğer karşılık gelecek şekilde çıkış hatlarının sırasını mi istiyorsunuz:
Hızlı bir geçici çözüm,
ParallelOptions
kabul şöyle aşırı kullanarak, askere izin parçacığıParallel.ForEach
sayısını sınırlamak için giriş sırası? Eğer öyleyse, 'Parallel.ForEach' doğru araç değildir. – adv12Hayır, çıktı çizgilerinin sırası önemli değil. – justindao
Emin değilim, ancak bu şekilde paralel kullanılmasının, onu önlemek yerine IO darboğazını yarattığı/kötüleştirdiğini hissediyorum. Bu satırlarda __really pahalı__ işlemleri yapıyorsanız .. – TaW