Используйте фоновый рабочий и читайте только ограниченное количество строк. Читайте больше только тогда, когда пользователь прокручивает.
И старайтесь никогда не использовать ReadToEnd (). Это одна из функций, которые вы думаете «почему они это сделали?»; это помощник детишек-сценариев , который отлично справляется с мелочами, но, как вы видите, отстой для больших файлов ...
Те парни, которые говорят вам использовать StringBuilder, должны чаще читать MSDN:
Особенности производительности
Методы Concat и AppendFormat объединяют новые данные с существующим объектом String или StringBuilder. Операция конкатенации объекта String всегда создает новый объект из существующей строки и новых данных. Объект StringBuilder поддерживает буфер для размещения конкатенации новых данных. Новые данные добавляются в конец буфера, если доступно пространство; в противном случае выделяется новый больший буфер, данные из исходного буфера копируются в новый буфер, затем новые данные добавляются в новый буфер.
Производительность операции конкатенации для объекта String или StringBuilder зависит от того, как часто происходит выделение памяти.
Операция конкатенации String всегда выделяет память, тогда как операция конкатенации StringBuilder выделяет память, только если буфер объекта StringBuilder слишком мал для размещения новых данных. Следовательно, класс String предпочтителен для операции конкатенации, если конкатенируется фиксированное количество объектов String. В этом случае отдельные операции конкатенации могут даже объединяться в одну операцию компилятором. Объект StringBuilder предпочтителен для операции конкатенации, если конкатенируется произвольное количество строк; например, если цикл объединяет случайное количество строк пользовательского ввода.
Это означает огромное выделение памяти, что широко используется системой файлов подкачки, которая имитирует разделы вашего жесткого диска, чтобы действовать как память ОЗУ, но жесткий диск очень медленный.
Опция StringBuilder отлично подходит для тех, кто использует систему в качестве однопользовательского, но когда два или более пользователей одновременно читают большие файлы, у вас возникает проблема.