Bénéficiant d'un objet StringBuilder
Comment fait-on effectivement disposer d'un StringBuilder
objet? Si un utilisateur génère des rapports multiples en une seule séance, mon application se termine à l'aide d'une grande quantité de mémoire.
J'ai lu dans quelques sites en ligne qui le suivent peuvent vous aider:
StringBuilder sb = new StringBuilder(1000000);
//loop goes here adding lots of stuff to sb
exampleObject.Text = sb.ToString();
sb.Length = 0;
La dernière ligne vraiment aider? Toute autre façon de traiter avec cela?
NB: Ce n'est pas vraiment arrêter mes utilisateurs de continuer à utiliser l'application. Je me demandais simplement si il existe un moyen d'éviter toute redondance entre l'utilisation de la mémoire.
- en prenant de l'1000000 peut aider
- Comment? Pré-allocation de mémoire a beaucoup aidé. Laisser StringBuilder constamment redimensionnement a ralentir les choses un peu.
Vous devez vous connecter pour publier un commentaire.
Non, un
StringBuilder
est purement ressource gérée. Vous devriez juste se débarrasser de toutes ses références. Tout le reste est pris en charge par le garbage collector:Dans .NET, il n'y a pas déterministe
delete
(comme en C++, où vous libérer de la mémoire allouée à un seul objet.) Seulement GC pouvez libérer de la mémoire. Par perdre toutes les références à un objet, vous laisserez GC être en mesure de libérer l'objet, si elle veut. Vous pouvez forcer un garbage collection en appelant leSystem.GC.Collect
méthode. Cependant, il n'est pas recommandé de les manipuler avec GC, sauf si vous savez vraiment ce que vous faites. GC est intelligent. Il est rarement utile de le forcer.À moins que le 'l'utilisation excessive de mémoire" est un problème, je voudrais le laisser tel qu'il est et ne pas s'inquiéter à ce sujet.
.NET est dans la plupart des cas assez intelligent pour éviter de faire une collecte des ordures si vous avez assez de mémoire disponible.
Si vous désirez générer de nombreux rapports, vous pourriez envisager de re-à l'aide d'un seul StringBuilder au lieu d'allouer un nouveau pour chaque rapport.