C # - запись в несколько файлов - PullRequest
0 голосов
/ 18 февраля 2019

В настоящее время я использую метод File.WriteAllLines для создания двух текстовых файлов из массива строк в консольном приложении .Net.

 string[] data = {"Apple", "Orange", "Lemon", ...};
 File.WriteAllLines("1.txt", data.OrderBy(d=>d));
 File.WriteAllLines("2.txt", data.OrderByDescending(d=>d));            

Массив огромен, поэтому для создания обоих файлов требуется некоторое время.Должен ли я создавать задачи для повышения производительности.Пример:

var t1 = Task.Factory.StartNew(() => File.WriteAllLines("1.txt", data.OrderBy(d=>d)));
var t2 = Task.Factory.StartNew(() => File.WriteAllLines("2.txt", data.OrderByDescending(d=>d));
Task.WaitAll(t1,t2);

Альтернативным вариантом является использование метода WriteAsync.

Какая лучшая практика в этом отношении?Стоит ли распараллеливать операцию записи файла?

1 Ответ

0 голосов
/ 18 февраля 2019

В общем случае параллелизм плохо работает с ресурсами ввода-вывода.Даже самый быстрый SSD работает медленнее, чем любой другой процессор.Независимо от того, порождаете ли вы задачи или нет, диск станет вашим узким местом.Но у вас также есть дисковый кеш, у вас есть другие процессы, сражающиеся за ваш диск.

Вам нужно протестировать.Но даже если это работает лучше в одном случае, это не гарантирует, что так будет всегда.

Когда речь идет о чтении и записи на диск, я лично буду избегать порождения задач.

...