Чтение больших текстовых файлов с потоками на C#C#

Место общения программистов C#
Ответить
Anonymous
 Чтение больших текстовых файлов с потоками на C#

Сообщение Anonymous »

Мне предстоит решить, как обрабатывать большие файлы, загружаемые в редактор сценариев нашего приложения (это похоже на VBA для нашего внутреннего продукта для быстрых макросов). Размер большинства файлов составляет около 300–400 КБ, что вполне нормально для загрузки. Но когда они превышают 100 МБ, процесс становится трудным (как и следовало ожидать).

Происходит следующее: файл читается и помещается в RichTextBox, который затем осуществляется навигация - не беспокойтесь об этой части.

Разработчик, написавший исходный код, просто использует StreamReader и делает

Код: Выделить всё

[Reader].ReadToEnd()
что может занять довольно много времени.

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

Некоторые предположения:
  • Большинство файлов имеют размер 30–40 МБ.
  • Содержимое файла является текстовым (не двоичным), некоторые имеют формат Unix, некоторые — DOS.
    После того, как содержимое получено, мы определяем, какой терминатор используется.
  • Никого не волнует время, необходимое для рендеринга в richtextbox после загрузки. Это всего лишь первоначальная загрузка текста.
Теперь вопросы:

< ul>
[*]Могу ли я просто использовать StreamReader, затем проверить свойство длины (то есть ProgressMax) и выполнить чтение для заданного размера буфера и выполнить итерацию в цикле while WHILST внутри фоновый рабочий, поэтому он не блокирует основной поток пользовательского интерфейса? Затем верните построитель строк в основной поток после его завершения.
[*]Содержимое будет передано в StringBuilder. могу ли я инициализировать StringBuilder с размером потока, если длина доступна?


Это (по вашему профессиональному мнению) хорошие идеи ? Раньше у меня возникало несколько проблем с чтением контента из Streams, потому что при этом всегда пропускались последние несколько байтов или что-то в этом роде, но если это так, я задам еще один вопрос.

Подробнее здесь: https://stackoverflow.com/questions/216 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»