WPF: Atribuir a RichTextBox.Document extremamente lento (7 minutos!)
-
08-07-2019 - |
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?
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 .