Pergunta

Eu estou construindo um FlowDocument formatado a partir de XML. O XML está bem formado e consiste principalmente de 10.000 nós cada um com um único nó com um valor de cadeia de 6 caracteres.

Analisando o XML para um XElement e construir o FlowDocument na memória leva cerca de 5 segundos. Atribuindo a FlowDocument à propriedade Document de um RichTextBox no meu aplicativo, em seguida, leva cerca de 7 minutos, e atinge o máximo da CPU para a época.

Aqui está a parte relevante do código:

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

Eu estou querendo saber o que está acontecendo aqui. Eu tenho perfilado o código e ver dezenas de milhares de chamadas para métodos não gerenciados, como fsFormatSubtrackBottomless e SubtrackFormatParaBottomless.

Alguém pode lançar alguma luz sobre o problema, ou chegar a uma solução alternativa?

Foi útil?

Solução 2

No final, eu não poderia encontrar uma solução para isso.

Eu estou usando uma solução alternativa -. Eu simplesmente não "bastante imprimir" mensagens sobre um determinado tamanho

Se alguém tiver uma solução melhor, fique à vontade para postá-lo.

Outras dicas

A seguir trecho de MacDonald Pro WPF em C # 2010 livro , p. 966:

O WPF RichTextBox, como a maioria dos ricos controles de texto que a precederam, pode ser um pouco lento. Se você precisa segurar enormes quantidades de dados, usar a lógica complexa para lidar com teclas pressionadas, ou adicionar efeitos como formatação automática (por exemplo, a sintaxe Visual Studio destacando ou sublinhando ortografia verificador do Word), o WPF RichTextBox provavelmente ganhou' t fornecer o desempenho que você precisa .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top