Ho un'attività che legge un file di grandi dimensioni riga per riga, ha una logica con esso e restituisce una stringa che è necessario scrivere in un file. L'ordine dell'output non ha importanza. Tuttavia, quando provo il codice qui sotto, si ferma/diventa molto lento dopo aver letto 15-20k linee del mio file.Come scrivere correttamente su un file usando Parallel.ForEach?
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);
}
}
});
Perché il mio programma rallenta dopo un certo periodo di tempo? C'è un modo più corretto per eseguire questa attività?
Avete bisogno l'ordine delle linee di uscita per corrispondere alla ordine di input? In tal caso, 'Parallel.ForEach' non è lo strumento giusto. – adv12
No, l'ordine delle linee di uscita non ha importanza. – justindao
Non ne sono sicuro, ma ritengo che l'utilizzo del parallelismo in questo modo stia creando/peggiorando il collo di bottiglia dell'IO invece di evitarlo. A meno che tu non stia facendo operazioni __ realmente costose su quelle linee .. – TaW