Почему Rich Text Box зависает при загрузке большой строки? - PullRequest
1 голос
/ 23 августа 2010

У меня есть программа, в которой мне нужно загрузить Rich Text из StringBuilder. Проблема в том, что иногда я получаю строку длиной 100 000 строк (и это возможная ситуация для программы), включая коды и цвета Rtf.

Проблема не в построении строки, а в том, что когда я присваиваю свойство Rtf StringBuilder.ToString (), для загрузки требуется твердое 4 минуты .

TextBox.Rtf = Build.ToString();

Если я скопирую эту же строку из StringBuilder и загрузлю ее в WordPad, это займет около 2 или 3 секунды . Я набираю перерисовку RTB с помощью SendMessage () и WM_SETREDRAW, но это ничего не меняет.

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

RichTextBox использует riched20.dll, что является v3.0 библиотеки Rich Edit Control из Microsoft . Тем не менее, WordPad использует msfedit.dll, версия 4.1.

Версия 4.1 примерно в 30 раз быстрее, чем v3.0

См. Это для получения дополнительной информации о версиях MSDN Об элементах управления Rich Edit

0 голосов
/ 23 августа 2010

Просто предположение, но могло ли случиться так, что GC (сборщик мусора) сработал?Это не должно длиться 4 минуты, хотя ...

0 голосов
/ 23 августа 2010

Извините, но управление RTB не будет сокращать 10 000 строк, не говоря уже о 100 000.

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

...