EPIDEMIASH
@EPIDEMIASH
Человек швейцарский нож

Как быстрее прочитать построчно большой файл?

Уже видел на хабре подобные вопросы, но когда речь идет про текстовые файлы весом от 40 мб и до 5 гб, некая ценность теряется.

Пытаюсь подгрузить построчно в RichTextBox текст, предварительно обработав каждую строку неким условием, из огромных файлов с логами. И если с файлом до 10 мб программа прекрасно справляется, то что делать с логами по 40Гб? Как например быстро открывает такие файлы FAR?

Часть моего кода:

using(var reader = new StreamReader(new BufferedStream(File.OpenRead(file), 1024*1024)))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// обработка и вывод строки
}
}


- сначала пробовал подгрузить весь лог в программу и потом работать с этим, но данных так много что она просто захлебнется
- сейчас читаю построчно, обрабатываю и вывожу, но все равно захлебнется

Как ускорить это все?
  • Вопрос задан
  • 223 просмотра
Решения вопроса 2
Zhbert
@Zhbert
Technical Writer, Linux user
Ну как вариант, грузить его частями: загрузил в память несколько десятков строк, обработал, выкинул, загрузил следующие... Грузить следующие можно еще в процесс обработки предыдущих, только смотри, чтобы за пределы памяти не вылезти.
Ответ написан
@Sing303
FAR не открывает весь файл целиком, если он превышает некоторые ​допустимые пределы
Он открывает определённую область файла, и при скролле/поиске подгружает нужные области
По факту там реально может быть открыт кусок 1-2 мб из файла, а все остальное подгружаться динамически
Нет смысла пытаться засовывать в RichTextBox 40 гб, достаточно засунуть столько, сколько можно глазами просмотреть за 1 раз. Ну и обработка 40 гб файла обычной линейной стурктуры дело не самое быстрое, чтобы его ускорить, файл должен иметь какой нибудь особый формат с поддержкой индексов и искать уже по ним
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
Вроде это так делается: memory-mapped-files
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы