我正在从
XML构建一个格式化的FlowDocument. XML格式良好,主要由10,000个节点组成,每个节点都有一个带有6个字符串值的节点.
将XML解析为XElement并在内存中构建FlowDocument大约需要5秒钟.在我的应用程序中将FlowDocument分配给RichTextBox的Document属性然后大约需要7分钟,并且在那段时间内最大化CPU.
以下是相关的代码:
// 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.
任何人都可以解决这个问题,或者想出一个解决方法吗?
最佳答案 以下是麦克唐纳
Pro WPF in C# 2010书的摘录,p. 966:
与之前的大多数富文本控件一样,WPF RichTextBox可能有点迟缓.如果需要保存大量数据,使用复杂的逻辑来处理按键,或者添加自动格式化等效果(例如,Visual Studio的语法高亮或Word的拼写检查器下划线),WPF RichTextBox可能无法提供你需要的表现.