WPF: Назначение RichTextBox.Document очень медленно (7 минут!)

StackOverflow https://stackoverflow.com/questions/1637908

Вопрос

Я создаю отформатированный FlowDocument из XML. XML правильно сформирован и состоит в основном из 10 000 узлов, каждый из которых содержит один узел со значением строки из 6 символов.

Анализ XML в XElement и создание FlowDocument в памяти занимает около 5 секунд. Присвоение FlowDocument свойству Document для RichTextBox в моем приложении занимает около 7 минут и максимально увеличивает загрузку ЦП на это время.

Вот соответствующий фрагмент кода:

// The following six lines of code execute in about 5 seconds

var xml = XElement.Parse(response.Data);

PrettyXmlConverter px = new PrettyXmlConverter();
FlowDocument fd = px.Render(xml);

Paragraph p = new Paragraph();
p.Inlines.Add(new Run(response.TimeStamp.ToShortDateString() + " " + response.TimeStamp.ToLongTimeString()));
fd.Blocks.InsertBefore(fd.Blocks.ElementAt(0), p);

// This line of code takes about 7 minutes and maxes out the CPU for that time.
tbResponse.Document = fd;

Мне интересно, что здесь происходит. Я профилировал код и вижу десятки тысяч обращений к неуправляемым методам, таким как fsFormatSubtrackBottomless и SubtrackFormatParaBottomless .

Кто-нибудь может пролить свет на проблему или придумать обходной путь?

Это было полезно?

Решение 2

В конце концов, я не смог найти решение этой проблемы.

Я использую обходной путь - я просто не "красиво печатаю" сообщения более определенного размера.

Если у кого-то есть лучшее решение, не стесняйтесь его опубликовать.

Другие советы

Следуя отрывку из книги Макдональда Pro WPF в C # 2010 , стр. 966:

WPF RichTextBox, как и большинство предшествующих ему элементов управления форматированным текстом, может быть немного вялым. Если вам нужно хранить огромные объемы данных, использовать сложную логику для обработки нажатий клавиш или добавлять эффекты, такие как автоматическое форматирование (например, подсветка синтаксиса в Visual Studio или проверка орфографии в Word), < strong> WPF RichTextBox, вероятно, не обеспечит необходимую производительность .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top