Domanda

Sto costruendo un FlowDocument formattato da XML. L'XML è ben formato e consiste principalmente di 10.000 nodi ciascuno con un singolo nodo con un valore di stringa di 6 caratteri.

L'analisi dell'XML in un XElement e la costruzione del FlowDocument in memoria richiedono circa 5 secondi. L'assegnazione del FlowDocument alla proprietà Document di un RichTextBox nella mia applicazione richiede circa 7 minuti e massimizza la CPU per quel tempo.

Ecco il codice pertinente:

// 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;

Mi chiedo cosa stia succedendo qui. Ho profilato il codice e ho visto decine di migliaia di chiamate a metodi non gestiti come fsFormatSubtrackBottomless e SubtrackFormatParaBottomless .

Qualcuno può far luce sul problema o trovare una soluzione?

È stato utile?

Soluzione 2

Alla fine, non sono riuscito a trovare una soluzione a questo.

Sto usando una soluzione alternativa - semplicemente non " pretty print " messaggi oltre una certa dimensione.

Se qualcuno ha una soluzione migliore, sentiti libero di pubblicarlo.

Altri suggerimenti

Segue estratto del Pro WPF in C # 2010 di MacDonald, p. 966:

Il RichTextBox di WPF, come la maggior parte dei controlli Rich Text che lo hanno preceduto, può essere un po 'lento. Se devi conservare enormi quantità di dati, utilizzare una logica complessa per gestire la pressione dei tasti o aggiungere effetti come la formattazione automatica (ad esempio, l'evidenziazione della sintassi di Visual Studio o sottolineatura del controllo ortografico di Word), < forte> il RichTextBox di WPF probabilmente non ha garantito le prestazioni di cui hai bisogno .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top