Я работаю над очень похожим проектом.
Проект предполагает загрузку большого текстового файла (максимальный размер около: 120 МБ, но мы хотим пойти выше), а затем построение контура текстового файла в дереве. Нажав на узел в дереве, вы прокрутите пользователя до этой части текстового файла.
Поговорив со многими людьми, я думаю, что лучшее решение - создать своего рода средство просмотра "скользящего окна", в которое вы загружаете только столько текста, сколько пользователь видит за раз в rtb.Text.
Итак ... скажем, загрузите весь файл в список, но поместите только 100 из этих строк в rtb.Text. Если пользователь прокручивает вверх, удалите нижнюю строку и добавьте строку текста вверху. Если они прокручиваются вниз, удалите верхнюю строку и добавьте строку текста к нижней. Я получаю довольно хорошую производительность с этим решением. (50 секунд для загрузки файла размером 120 МБ)