WPF:RichTextBox.Documentへの割り当てが非常に遅い(7分!)
-
08-07-2019 - |
質問
XMLからフォーマット済みの FlowDocument
を作成しています。 XMLは整形式で、主にそれぞれが6文字の文字列値を持つ単一ノードを持つ10,000個のノードで構成されています。
XMLを XElement
に解析し、メモリ内に FlowDocument
を構築するには、約5秒かかります。アプリケーションの RichTextBox
の Document
プロパティに FlowDocument
を割り当てると、約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 の本からの抜粋。 966:
WPF RichTextBoxは、それ以前のほとんどのリッチテキストコントロールと同様に、少し遅くなる可能性があります。大量のデータを保持する必要がある場合は、複雑なロジックを使用してキー入力を処理するか、自動書式設定(Visual Studioの構文強調表示やWordのスペルチェック下線など)などの効果を追加します。< strong> WPF RichTextBoxはおそらく必要なパフォーマンスを提供しません。