Question

Je construis un FlowDocument formaté à partir de XML. Le code XML est bien formé et consiste principalement en 10 000 nœuds, chacun avec un seul nœud avec une valeur de chaîne de 6 caractères.

L'analyse du code XML en un XElement et la construction du FlowDocument en mémoire prennent environ 5 secondes. L'affectation de FlowDocument à la propriété Document d'un RichTextBox dans mon application prend alors environ 7 minutes et limite l'utilisation maximale du processeur pour cette fois.

Voici le code pertinent:

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

Je me demande ce qui se passe ici. J'ai profilé le code et vu des milliers d'appels à des méthodes non gérées, telles que fsFormatSubtrackBottomless et SubtrackFormatParaBottomless .

Quelqu'un peut-il apporter des éclaircissements sur le problème ou proposer une solution de contournement?

Était-ce utile?

La solution 2

Au final, je n'ai pas trouvé de solution à ce problème.

J'utilise une solution de contournement. Je ne fais tout simplement pas "jolie impression". messages dépassant une certaine taille.

Si quelqu'un a une meilleure solution, n'hésitez pas à la poster.

scroll top