我正在从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

任何人都可以解决这个问题,或者想出一个解决方法吗?

有帮助吗?

解决方案 2

最后,我无法找到解决方法。

我正在使用一种解决方法 - 我根本就没有“漂亮的打印”超过一定大小的消息。

如果有人有更好的解决方案,请随时发布。

其他提示

以下摘录自MacDonald的 Pro WPF in C#2010 一书,p。 966:

WPF RichTextBox与之前的大多数富文本控件一样,可能有点迟缓。如果需要保存大量数据,请使用复杂的逻辑来处理按键,或添加自动格式化等效果(例如,Visual Studio&#8217;语法高亮或Word&#8217; s拼写检查器下划线),< strong> WPF RichTextBox可能无法提供您所需的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top