Écrire d’énormes quantités de texte dans une zone de texte

J’écris un journal contenant de nombreux textes formatés dans une zone de texte d’une application de formulaire Windows .net.

Il est lent une fois que les données dépassent quelques Mo. Depuis que j’ajoute, la chaîne doit être réaffectée à chaque fois, n’est-ce pas? Je n’ai besoin que de définir la valeur sur la zone de texte une fois, mais dans mon code, je fais line+=data dizaines de milliers de fois.

Y a-t-il un moyen plus rapide de faire cela? Peut-être un contrôle différent? Existe-t-il un type de chaîne de liste chaînée que je peux utiliser?

SsortingngBuilder ne vous aidera pas si la zone de texte est ajoutée de manière incrémentielle, comme la sortie du journal par exemple.

Mais, si ce qui précède est vrai et si vos mises à jour sont suffisamment fréquentes, il peut vous incomber de mettre en cache un certain nombre de mises à jour, puis de les append en une seule étape (plutôt que d’append constamment). Cela vous épargnerait de nombreuses réallocations de chaînes … et ensuite, SsortingngBuilder serait utile.

Remarques:

  1. Créer un membre SsortingngBuilder de classe (_sb)
  2. Démarrer une timer (ou utiliser un compteur)
  3. Ajouter des mises à jour de texte à _sb
  4. Lorsque la timer ou certains compteurs ont atteint la réinitialisation et l’ajout à la zone de texte
  5. processus de redémarrage de # 1

Personne n’a encore mentionné la virtualisation, qui est vraiment le seul moyen de fournir des performances prévisibles pour des volumes de données énormes. Même utiliser un SsortingngBuilder et le convertir en chaîne toutes les demi-secondes sera très lent une fois que le journal sera suffisamment volumineux.

Avec la virtualisation des données, vous ne garderiez que les données nécessaires en mémoire (c’est-à-dire ce que l’utilisateur peut voir, et peut-être un peu plus de chaque côté), le rest étant stocké sur disque. Les anciennes données se “déploieraient” de la mémoire à mesure que de nouvelles données les remplaceraient.

Pour que la zone de TextBox apparaisse comme contenant beaucoup de données, indiquez-le. Lorsque l’utilisateur défile, vous devez remplacer les données dans la mémoire tampon par les données pertinentes de la source sous-jacente (en utilisant un access de fichier aléatoire). Ainsi, votre interface utilisateur surveillera un fichier et n’écoutera pas les événements de journalisation.

Bien sûr, tout cela représente beaucoup plus de travail que d’utiliser simplement un SsortingngBuilder , mais je pensais que cela valait la peine d’être mentionné au cas où.

Construisez votre chaîne avec un constructeur de chaînes, puis convertissez-la en chaîne à l’aide de toSsortingng() et affectez-la à la zone de texte.