2010-08-09 17 views
3

Le RTB de WPF est terriblement lent lorsque vous travaillez avec une quantité de texte réaliste. Et par quantité réaliste, je veux dire ce que vous attendez de n'importe quel éditeur de texte pour être capable de gérer (100kb? Au moins) sans montrer aucun signe de lenteur.Problèmes de performances de RichTextBox de WPF

Ce comportement RTB attendu n'est pas le cas pour moi. En fait, le contrôle fonctionne à peu près comme il se doit lorsque le texte est soigneusement séparé en petits mots et petits paragraphes et j'implémente un mécanisme qui va zapper mes utilisateurs quand ils sont courageux et saisissent quelque chose de très long. Je n'ai pas encore trouvé le moyen d'implémenter ce mécanisme, donc je suis obligé de (ou au moins de tenter) de résoudre le problème. Je trouve cela profondément troublant car cela n'a aucun sens pour moi. Si vous êtes un casse-cou et que vous tapez une longue chaîne de caractères sans espace ni pause, vous êtes victime d'une fenêtre verrouillée pendant plusieurs secondes, ce qui rend le test de patience inopportun. Ce que j'ai hâte de savoir, c'est: pourquoi cela? Plus précisément, pourquoi ralentit-il de plus en plus et seulement lorsque le texte n'est pas régulièrement espacé? Suis-je fou de considérer le cas où quelqu'un utilisant mon programme aura une barre d'espace brisée et sera donc plus enclin à remarquer ce ralentissement incroyable? La sélection de texte est également gravement affectée dans ce cas de chaîne contiguë.

Je cible .NET 4.0, en utilisant VS 2010, et aucun événement n'est accroché sur le RTB; à des fins de test, ce n'est rien d'autre qu'un RTB (< RichTextBox />) sur une fenêtre vide. Que puis-je faire pour améliorer ses performances? Est-il plus réaliste de simplement écrire mon propre contrôle pour cela, en gardant le jeu de fonctionnalités à mes exigences minimales? Si oui, tout lien vers des ressources serait grandement apprécié.

Il est à noter que la quantité de données dans la zone RichTextBox peut être très petite; Ce que j'essayais de faire comprendre, c'est que c'est le format du texte qui a eu le plus grand impact sur la performance.

+3

Il ne s'agit pas d'une catégorie quelconque dans laquelle il serait possible de tracer des longueurs de caractères. –

Répondre

1

Ce problème n'est pas inhabituel pour les nouvelles implémentations de zones de texte. Cela a à voir avec l'algorithme utilisé pour calculer les sauts de ligne. Basé sur le type de comportement que vous rapportez, il semble que l'efficacité de l'algorithme qu'ils utilisent dépend fortement de la longueur ou des mots (ie, il pourrait être, disons, O (n^2) par rapport à la longueur des mots). Vous devez signaler cela directement à Microsoft (avec un exemple clair) afin qu'ils puissent corriger le bug.