WPF: Zuordnung extrem langsam RichTextBox.Document (7 Minuten!)
-
08-07-2019 - |
Frage
Ich bin eine formatierte FlowDocument
von XML zu konstruieren. Die XML ist gut ausgebildet und besteht hauptsächlich aus 10.000 Knoten, die jeweils mit einem einzigen Knoten mit einem 6 Zeichenkette Wert.
Das Parsen der XML in ein XElement
und die FlowDocument
im Speicher Konstruktion dauert ca. 5 Sekunden. Zuweisen der FlowDocument
zum Document
Eigenschaft eines RichTextBox
in meiner Anwendung dann dauert etwa 7 Minuten und maxes die CPU für diese Zeit.
Hier ist der relevante Teil des Codes:
// 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;
Ich frage mich, was hier los ist. Ich habe den Code profiliert und Partituren von Tausenden von Anrufen auf nicht verwalteten Methoden wie fsFormatSubtrackBottomless
und SubtrackFormatParaBottomless
sehen.
Kann jemand irgendein Licht auf das Problem werfen, oder kommen mit einer Vermeidung des Problems?
Lösung 2
Am Ende konnte ich nicht eine Lösung für dieses.
Ich bin mit einem Problem zu umgehen -. Ich einfach nicht „ziemlich print“ Nachrichten über eine bestimmte Größe
Wenn jemand eine bessere Lösung hat, fühlen sich frei, es zu veröffentlichen.
Andere Tipps
Nach Auszug aus MacDonalds Pro WPF in C # 2010 Buch, S.. 966:
Die WPF RichTextBox, wie die meisten der Rich-Text-Steuerelemente, die es vorangegangen sind, kann ein bisschen träge. Wenn Sie große Mengen an Daten zu halten brauchen, komplizierte Logik verwenden Tastendrücke zu handhaben, oder Effekte wie die automatische Formatierung hinzufügen (zum Beispiel Visual Studio Syntaxhervorhebung oder Word Rechtschreibprüfung unterstrichen), die WPF RichTextBox wahrscheinlich gewonnen‘ t liefern die Leistung, die Sie benötigen .