Maison  >  Article  >  développement back-end  >  Une brève explication de l'utilisation des classes Builder et Buffer en C#

Une brève explication de l'utilisation des classes Builder et Buffer en C#

巴扎黑
巴扎黑original
2017-05-15 09:27:143148parcourir

Cet article présente brièvement l'utilisation des trois classes String StringBuilder et StringBuffer en C#. Les amis qui en ont besoin peuvent s'y référer

String, StringBuilder et StringBuffer méritent d'être étudiés en profondeur. beaucoup de gens peuvent dire que si cela ne fonctionne pas, utilisez simplement StringBuilder et rien ne se passera. Je ne peux pas dire que votre idée est incorrecte, mais je peux vous donner de meilleures suggestions. Vous trouverez ci-dessous une brève introduction à ces trois catégories.

Classe String

Dans notre utilisation quotidienne, il est facile de ne pas remarquer que le code que nous écrivons peut facilement être encadré Opération (convertir la valeur type en type de référence). Par exemple, une concaténation de chaînes très courante

string str=9+"test"; peut être constatée en regardant le code IL indiquant qu'une opération de boxe a eu lieu ici. Il est donc recommandé de l'utiliser (n'oubliez pas d'utiliser la méthode ToString lors de la conversion du type valeur en chaîne). Ainsi, lorsque vous écrivez habituellement du code, vous devez faire attention aux opérations de boxing et de unboxing (les collections génériques présentées plus tard visent simplement à résoudre les opérations de boxing et de unboxing). Le processus d'opération de boxe : placer le type valeur dans le tas géré pour allouer de la mémoire En plus de la mémoire allouée par le type valeur lui-même, la mémoire totale doit également ajouter la mémoire occupée par le pointeur d'objet de type et le bloc d'index de synchronisation, et puis la valeur La valeur du type est réaffectée dans la mémoire tas, et enfin l'adresse de l'objet du type référence est renvoyée.

Nous savons que de nombreux types (types valeur) sont livrés avec une méthode ToString. Pourquoi ne l'utilisez-vous pas pour éviter les opérations de boxe ? C'est une simple vérité. Personne ne vous a dit que le type Value (). bien qu'il s'agisse d'un type référence), le concepteur du langage C#, pour y parvenir, il a imaginé cette méthode

pour convertir l'objet String en un type valeur qui ne peut plus être modifié une fois attribué (appelé la constance de la chaîne), une fois l'affectation terminée, si la chaîne est épissée, attribuée, etc., un nouvel espace mémoire sera réalloué dans la mémoire.

StringBuilder

Sur la base du problème ci-dessus, la classe de chaîne réallouera l'espace mémoire lors de la réaffectation, donc afin de résoudre ce problème, Microsoft lancé une classe StringBuilder. Vous pouvez voir comment la classe StringBuilder ne réalloue pas de mémoire.

En lisant l'implémentation de la classe StringBuiler, on peut constater que la taille par défaut de la classe

   internal const int DefaultCapacity = 0x10; StringBuilder est de 16, ce qui signifie que si on ne précise pas la longueur de StringBuilder et dépasse 16 longueurs, il réaffectera à nouveau la mémoire. Pour une implémentation spécifique, vous pouvez consulter le code source Append de la classe StringBuilder.

Il ressort du code que lorsque nous utilisons habituellement StringBuilder, nous devons spécifier la longueur appropriée. Le bloc d'instructions fixes dans le code source (en termes simples, vous pouvez désactiver le garbage collection et recycler l'adresse de la variable).

Résumé : lors de l'écriture de code, vous devez faire attention aux opérations de boxing et de unboxing, ainsi qu'à l'utilisation de stringBuilder.

【Recommandations associées】

1 Recommandation spéciale : "php Téléchargement de la version V0.1 de "Programmer Toolbox"

2. Tutoriel vidéo gratuit ASP

Tutoriel vidéo de base de Li Yanhui ASP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn