Pregunta

Estoy construyendo un FlowDocument formateado a partir de XML. El XML está bien formado y consta principalmente de 10.000 nodos, cada uno con un solo nodo con un valor de cadena de 6 caracteres.

Analizar el XML a un XElement y construir el FlowDocument en la memoria lleva unos 5 segundos. Asignar el FlowDocument a la propiedad Document de un RichTextBox en mi aplicación, demora aproximadamente 7 minutos y maximiza la CPU por ese tiempo.

Aquí está el fragmento de código relevante:

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

Me pregunto qué está pasando aquí. He perfilado el código y veo miles de llamadas a métodos no administrados, como fsFormatSubtrackBottomless y SubtrackFormatParaBottomless .

¿Alguien puede arrojar alguna luz sobre el problema o encontrar una solución?

¿Fue útil?

Solución 2

Al final, no pude encontrar una solución para esto.

Estoy usando una solución alternativa, simplemente no "imprimo bonito" mensajes de más de cierto tamaño.

Si alguien tiene una mejor solución, siéntase libre de publicarla.

Otros consejos

Siguiente extracto del Pro WPF en el libro C # 2010 de MacDonald, p. 966:

El WPF RichTextBox, como la mayoría de los controles de texto enriquecido que lo han precedido, puede ser un poco lento. Si necesita mantener grandes cantidades de datos, use una lógica compleja para manejar las pulsaciones de teclas o agregue efectos como el formato automático (por ejemplo, el resaltado de sintaxis de Visual Studio o el subrayado del corrector ortográfico de Word), < strong> el RichTextBox de WPF probablemente no proporcionará el rendimiento que necesita .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top