J'utilise wxWidgets et Visual C++ pour créer des fonctionnalités similaires à l'utilisation d'Unix "tail -f" avec un formatage riche (couleurs, polices, images) dans une interface graphique. Je cible à la fois wxMSW et wxMAC.Comment ajouter rapidement une grande quantité de contenu riche (images, formatage) à un contrôle sans utiliser des tonnes de CPU?
La réponse évidente est d'utiliser wxTextCtrl avec wxTE_RICH, en utilisant les appels à wxTextCtrl :: SetDefaultStyle() et wxTextCtrl :: WriteText().
Cependant, sur mon poste de travail 3ghz, compilé en mode release, je suis incapable de conserver un journal qui croît en moyenne de 1 ms par ligne, pour finir par être en retard. Pour chaque ligne, je suis encourais:
- Deux appels à SetDefaultStyle()
- Deux appels deux WriteText()
- Un appel à gel() et Thaw() le widget
Lors de l'exécution de cette opération, mon processeur passe à 100% sur un cœur en utilisant wxMSW après avoir rempli environ 20 000 lignes. Le programme est visiblement plus lent une fois qu'il atteint un certain seuil, tombant plus loin derrière.
Je suis ouvert à l'utilisation d'autres contrôles (wxListCtrl, wxRichTextCtrl, etc.).