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?

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top