WPF: Назначение RichTextBox.Document очень медленно (7 минут!)
-
08-07-2019 - |
Вопрос
Я создаю отформатированный 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, вероятно, не обеспечит необходимую производительность .