Я создаю отформатированный 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
.
Может кто-нибудь пролить свет на проблему или придумать обходной путь?