【问题标题】:WPF : Assigning to RichTextBox.Document extremely slow (7 minutes!)WPF:分配给 RichTextBox.Document 非常慢(7 分钟!)
【发布时间】:2010-12-10 21:48:59
【问题描述】:

我正在从 XML 构造一个格式化的 FlowDocument。 XML 格式良好,主要由 10,000 个节点组成,每个节点都有一个节点,其值为 6 个字符串。

将 XML 解析为 XElement 并在内存中构造 FlowDocument 大约需要 5 秒。在我的应用程序中,将FlowDocument 分配给RichTextBoxDocument 属性大约需要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;

我想知道这里发生了什么。我分析了代码并看到了对非托管方法(例如fsFormatSubtrackBottomlessSubtrackFormatParaBottomless)的数十万次调用。

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

【问题讨论】:

    标签: c# .net wpf .net-3.5 richtextbox


    【解决方案1】:

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

    WPF RichTextBox 与之前的大多数富文本控件一样,可能有点迟钝。如果您需要保存大量数据,使用复杂的逻辑来处理按键,或者添加诸如自动格式化之类的效果(例如,Visual Studio 的语法突出显示或 Word 的拼写检查器下划线),WPF RichTextBox 可能会胜出。无法提供您需要的性能

    【讨论】:

    【解决方案2】:

    最后,我找不到解决办法。

    我正在使用一种解决方法 - 我只是不会“漂亮地打印”超过特定大小的消息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 2019-05-30
      • 2017-03-18
      • 2017-04-08
      • 2015-05-07
      相关资源
      最近更新 更多