Où les chaînes sont-elles plus utiles qu’un SsortingngBuilder?

Beaucoup de questions ont déjà été posées sur les différences entre les constructeurs de chaînes et les constructeurs de chaînes, et la plupart des gens suggèrent que le constructeur de chaînes est plus rapide que ssortingng. Je suis curieux de savoir si le constructeur de cordes est trop bon, alors pourquoi y a-t-il une chaîne? De plus, un corps peut-il me donner un exemple où ssortingng sera plus utile qu’un constructeur de cordes?

Ce n’est pas un cas qui est plus utile …

Une Ssortingng est une Ssortingng – un ou plusieurs caractères côte à côte. Si vous voulez changer une chaîne, cela créera simplement plus de chaînes car elles sont immuables .

SsortingngBuilder est une classe qui crée des chaînes. Il fournit un moyen de les construire sans créer beaucoup de chaînes redondantes en mémoire. Le résultat final sera toujours une Ssortingng .

Ne fais pas ça

 ssortingng s = "my ssortingng"; s += " is now a little longer"; 

ou

 s = s + " is now longer again"; 

Cela créerait 5 chaînes en mémoire (en réalité, voir ci-dessous).

Faire ceci:

 SsortingngBuilder sb = new SsortingngBuilder(); sb.Append("my ssortingng"); sb.Append(" is now a little longer"); sb.Append(" is now longer again"); ssortingng s = sb.ToSsortingng(); 

Cela créerait 1 chaîne en mémoire (à nouveau, voir ci-dessous).

Tu peux le faire:

 ssortingng s = "It is now " + DateTime.Now + "."; 

Cela ne crée qu’une chaîne en mémoire.

En SsortingngBuilder , la création d’un SsortingngBuilder nécessite quand même une certaine quantité de mémoire. En règle générale:

  • Utilisez toujours un SsortingngBuilder si vous concaténez des chaînes dans une boucle.
  • Utilisez un SsortingngBuilder si vous concaténez une chaîne plus de 4 fois.

SsortingngBuilder est, comme son nom l’indique, utilisé pour construire des chaînes, tandis que les chaînes sont des valeurs de caractère immuables. Utilisez des chaînes lorsque vous souhaitez transmettre des données de caractère, utilisez SsortingngBuilder lorsque vous souhaitez manipuler des données de caractère.

SsortingngBuilder est une meilleure option lors de la construction et de la modification de chaînes par le biais de boucles ou d’itérations lourdes.

Des opérations de chaîne simples, telles que quelques concaténations ou le simple stockage d’une valeur de chaîne, conviennent beaucoup mieux à un object de chaîne standard.

Question similaire? Ssortingng vs. SsortingngBuilder

SsortingngBuilder est préférable lorsque vous devez modifier la valeur. Sinon, vous n’en avez pas besoin.

Si je dois utiliser la même valeur de chaîne à 10 endroits, je vais utiliser Ssortingng. Si j’ai besoin de le changer 10 fois, SsortingngBuilder.

Voulez-vous vraiment utiliser un constructeur de cordes ici?

 Console.WriteLine("MySsortingng"); 

SsortingngBuilder est idéal lorsque vous devez effectuer de grandes quantités de concaténation pour créer une chaîne.

Jon Skeet a un bon article à ce sujet ici: http://www.yoda.arachsys.com/csharp/ssortingngbuilder.html

Consultez la section qui commence par “Alors je devrais utiliser SsortingngBuilder partout, non?”

Il écrit:

La différence importante entre cet exemple et le précédent est que nous pouvons facilement présenter toutes les chaînes devant être concaténées ensemble dans un seul appel à Ssortingng.Concat. Cela signifie qu’aucune chaîne intermédiaire n’est nécessaire. SsortingngBuilder est efficace dans le premier exemple car il agit comme un conteneur pour le résultat intermédiaire sans avoir à copier ce résultat à chaque fois. En l’absence de résultat intermédiaire, il ne présente aucun avantage.


En bref, c’est un compromis entre mutable et immuable

Voir ceci: SsortingngBuilder vs Ssortingng

SsortingngBuilder n’est pas plus rapide que d’utiliser une chaîne aussi loin que de créer une chaîne.

SsortingngBuilder peut être plus rapide lorsque vous devez concaténer plusieurs chaînes (comme dans une boucle). Vous allez payer une pénalité de performance lorsque vous devez convertir le contenu du constructeur de chaînes en chaîne.

L’un des avantages réels de SsortingngBuilder par rapport à chaîne est que vous pouvez le transmettre à travers plusieurs méthodes et append des chaînes en cours de route. Vous ne pouvez pas faire cela en passant un object ssortingng. Ainsi, si vous créez une opération récursive comme un object JSON ou autre, vous pouvez passer le SsortingngBuilder et append les valeurs.

Une ficelle c’est bien parce qu’elle est immuable. Et c’est immuable, c’est bien, c’est ce que prouvent les langages fonctionnels.

Parce que si vous avez une chaîne (référence à) “Ceci est une chaîne”, vous pouvez être sûr qu’elle aura toujours la même valeur. Bien que la valeur d’un SsortingngBuilder puisse être modifiée (par un appel de méthode, un autre thread, etc.).

Cependant, vous avez parfois besoin d’optimisations brutes, de vitesse pure et d’utilisation de la mémoire. Dans ce cas, vous utilisez un constructeur de chaînes.

Un exemple:

  var a = "This is a ssortingng"; var b = a; a += ". And some part is added"; // a now references another ssortingng in memory var aSB = new SsortingngBuilder("This is a ssortingng"); var bSB = aSB aSB.Append(". And some part is added"); // aSB and bSB still reference the same memory spot Console.WriteLine(b); // ==> This is a ssortingng Console.WriteLine(bSB); // ==> This is a ssortingng. And some part is added 

Une parsing de ce qu’il faut utiliser est fournie à l’ adresse suivante : Concaténation de chaînes de manière efficace .

Essentiellement, (bien que le lien soit complet pour une parsing complète), utilisez SsortingngBuilder lors de la concaténation dans une boucle non sortingviale.