У меня есть прекрасная задача разработать, как обрабатывать большие файлы, загружаемые в редактор сценариев нашего приложения (это как VBA для нашего внутреннего продукта для быстрых макросов). В большинстве файлов около 300-400 КБ, что является хорошей загрузкой. Но когда они выходят за рамки 100 МБ, процесс имеет трудное время (как и следовало ожидать).Чтение больших текстовых файлов с потоками в C#
Что происходит, так это то, что файл читается и перемещается в RichTextBox, который затем перемещается - не беспокойтесь слишком много об этой части.
разработчик, который написал исходный код просто с помощью StreamReader и делать
[Reader].ReadToEnd()
, который может занять некоторое время, чтобы закончить.
Моя задача - разбить этот бит кода, прочитать его в кусках в буфер и показать панель прогресса с возможностью ее отмены.
Некоторые предположения:
- Большинство файлов будут 30-40 MB
- Содержимое файла является текст (не бинарный), некоторые из них в формате Unix, некоторые DOS.
- После получения содержимого мы выясним, какой терминатор используется.
- Никто не беспокоится о том, что он загружает время, необходимое для рендеринга в richtextbox. Это только начальная загрузка текста.
Теперь вопросы:
- Могу ли я просто использовать StreamReader, а затем проверить свойство Length (так ProgressMax) и выдавать ридовского для размера набора буфера и перебирать в цикле в то время как в то время как внутри рабочего рабочего, поэтому он не блокирует основной поток пользовательского интерфейса? Затем верните stringbuilder в основной поток после его завершения.
- Содержимое будет передано в StringBuilder. Можно ли инициализировать StringBuilder с размером потока, если длина доступна?
Эти (в ваших профессиональных мнениях) хорошие идеи? В прошлом у меня было несколько проблем с чтением контента из Streams, потому что он всегда будет пропускать последние несколько байтов или что-то в этом роде, но я задам еще один вопрос, если это так.
30-40MB файлы сценариев? Святая скумбрия! Мне бы очень хотелось, чтобы код был проверен ... – dthorpe
Это всего лишь несколько строк кода. См. Эту библиотеку, которую я использую для чтения 25 ГБ и более больших файлов. https://github.com/Agenty/FileReader/ – Vicky