2010-01-24 3 views
2

J'ai un wxTextCtrl et j'ai besoin de mettre une très grande chaîne dedans. (Comme une chaîne de 15 Mo) Le seul problème est que c'est très lent. Voici ce que je fais:Pourquoi wxTextCtrl est-il si lent à afficher du texte?

char * buff = ... 
wxString data(buff, wxConvUTF8); 
text->ChangeValue(data); 

Cependant, ce n'est pas le goulot d'étranglement. Cela se produit dès que la fonction retourne ce bloc de code. L'application entière se fige pendant environ 30 secondes. J'ai essayé wxYield juste après ChangeValue et cela provoque l'affichage des premières lignes de la chaîne dans le contrôle mais il se fige après. Comment puis-je éviter ça?

Je dois souligner que ChangeValue revient presque instantanément. Le délai se produit après cela, probablement dans les gestionnaires de messages internes de wxTextCtrl ou quelque chose.

+1

Il semble que les personnes qui ont conçu wxTextCtrl n'aient pas prévu que quelqu'un bourrerait une chaîne de 15 Mo (environ la taille d'un livre de programmation). –

+0

J'ouvre un journal de serveur. –

+0

Vous pouvez implémenter un mécanisme de pagination et ne charger qu'une petite fenêtre du texte total en même temps. Cette approche devrait être presque instantanée. Je n'ai pas assez d'expertise dans wxWidgets pour vous dire comment faire cela, cependant. –

Répondre

2

wxTextCtrl Enveloppe le contrôle de texte standard de l'OS uniquement, de sorte que toutes les limites de ce sera évident avec wxTextCtrl. Ce que vous pouvez faire est d'utiliser le wxStyledTextCtrl à la place, qui est capable de charger des textes de plusieurs mégaoctets et ne tarde pas à le faire. Vous pouvez même mettre en évidence des parties de votre journal en les stylisant (par exemple, des messages d'erreur en lecture), mais cela augmenterait probablement le temps de chargement à nouveau.

+0

Mise à jour: J'ai découvert ce qui le rendait si lent - mon code de ligne, que j'ai maintenant corrigé. –

Questions connexes