Как грамотно использовать много-поточность что бы обрабатывать большие текстовые документы. Допустим у меня есть документ .txt в котором каждый символ 4
нужно заменить на четыре
или D
на Д
и т.д. т.к. файлы очень большие то обработка такого числа символов(от 10 000 до 1 000 000) затягивается надолго. Использовать много поточность или как то иначе сократить время обработки?
Читаем файл :
string document = File.ReadAllText(Path);
string[] Mass = document.Split(' ');
далее в цикле обрабатываем каждый элемент массива Mass
Вы делаете очень неоптимально: чтение всего файла в память и разбиение на строки создаёт много ненужных объектов, и нагружает память.
Попробуйте читать файл через File.ReadLines
(ни в коем случае не через ReadAllLines
!), обрабатывать построчно и записывать построчно в новый файл.
Например:
File.WriteAllLines(
"newfile",
File.ReadLines("oldfile").Select(ProcessLine));
с функцией
string ProcessLine(string s)
{
// обрабатываем одну строку и возвращаем результат
}
Во первых, используйте асинхронный доступ к файлам, чтобы высвобождать потоки обратно в пул и занять их другой работой, при активации IO потока.
Во вторых, прочитав содержимое, используйте Task.Parallel.Library для параллельного поиска в строках по файлу. (Parallel.ForEach)
Дальше, асинхронная запись целого файла.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мой статический класс Logger пишет лог в текстовый файлФайл лога новый каждый день и на каждого пользователя
В клиенте RdKafka мне необходимо прочитать Avro сообщенияВ консоли я дописывал свойство: