Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:正在分配到RichTextBox。文档速度非常慢(7分钟!)_C#_.net_Wpf_.net 3.5_Richtextbox - Fatal编程技术网

C# WPF:正在分配到RichTextBox。文档速度非常慢(7分钟!)

C# WPF:正在分配到RichTextBox。文档速度非常慢(7分钟!),c#,.net,wpf,.net-3.5,richtextbox,C#,.net,Wpf,.net 3.5,Richtextbox,我正在从XML构建格式化的FlowDocument。XML格式良好,主要由10000个节点组成,每个节点有一个具有6个字符串值的节点 将XML解析为XElement并在内存中构建FlowDocument大约需要5秒钟。在我的应用程序中,将FlowDocument分配给RichTextBox的Document属性大约需要7分钟,并在这段时间内使CPU达到最大值 以下是相关代码: // The following six lines of code execute in about 5 second

我正在从XML构建格式化的
FlowDocument
。XML格式良好,主要由10000个节点组成,每个节点有一个具有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


谁能解释一下这个问题,或者想出一个解决办法吗?

最后,我找不到解决这个问题的办法

我使用的是一种变通方法——我只是不“漂亮地打印”超过一定大小的消息


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

以下摘自麦克唐纳的书,p。966:


WPF RichTextBox与之前的大多数富文本控件一样,可能有点迟钝。如果您需要保存大量数据,使用复杂的逻辑来处理按键,或添加自动格式化等效果(例如,Visual Studio的语法高亮显示或Word的拼写检查下划线),WPF RichTextBox可能无法提供您所需的性能,当你在谷歌上搜索时,这就是付费广告:我也知道在codeplex和code project上都有开源广告,只是记不起他们的名字。嗯,很好的发现!我确实找到了一个替代品,不过它的用途与您共享的不同(我还没有尝试过):+1与我见过的任何其他东西都大不相同。谢谢分享。