Le travail avec les chaînes est l'une des tâches les plus courantes dans Visual Basic. Dans l'histoire du langage, le type String a été initialement conçu comme un objet mutable pratique, mais a ensuite été mis en œuvre comme immuable pour améliorer la fiabilité et la sécurité lors du traitement répété des données. Le problème principal réside dans le fait qu'à chaque opération de concaténation, lorsque des chaînes sont ajoutées via + ou &, un nouvel objet est créé — ce qui a un impact significatif sur les performances lors du traitement de grandes quantités de texte, par exemple lors de la génération de rapports ou de journaux.
La solution a été l'utilisation de la classe spéciale StringBuilder, qui permet de « construire » efficacement une chaîne, en minimisant les allocations de mémoire et la duplication des données. À l'intérieur, cette classe conserve un tampon qui s'agrandit dynamiquement au besoin, et le résultat peut être obtenu par un appel à ToString().
Exemple de code :
Dim sb As New System.Text.StringBuilder() For i As Integer = 1 To 10000 sb.Append("Ligne " & i & vbCrLf) Next dim result As String = sb.ToString()
Caractéristiques clés :
String — les valeurs sont immuables, chaque opération d'assignation crée une nouvelle chaîne en mémoire.StringBuilder — efficace pour les modifications fréquentes, adapté pour concaténer de grandes quantités de données.+ ou & est pratique uniquement pour de petites opérations rares.Pourquoi parfois + et & se comportent-ils différemment lors de la concaténation de chaînes ?
L'opérateur + peut entraîner une conversion de type inattendue si l'un des opérandes est un nombre ou un autre type. L'opérateur & concatène strictement des chaînes, même si l'opérande n'est pas une chaîne (il est converti).
Dim a As String = "5" Dim b As Integer = 10 Dim s1 = a + b ' Cela donnera 15 à cause de l'addition des nombres ! Dim s2 = a & b ' Cela donnera "510", car il s'agit d'une concaténation de chaînes
StringBuilder peut-il être plus lent que String ?
Oui, pour de petites chaînes (par exemple, 2-3 opérations) et des modifications rares, StringBuilder peut être excessif — alors la concaténation ordinaire peut être comparable en vitesse ou même plus rapide en raison d'une charge mémoire moindre.
Peut-on modifier une chaîne par index dans Visual Basic ?
Non, les chaînes sont immuables — vous ne pouvez pas modifier un caractère par index directement. Il faut créer un nouvel objet :
Dim str As String = "test" str = str.Substring(0, 1) & "A" & str.Substring(2) ' Maintenant str = "tAst"
+, surtout si les variables peuvent ne pas être des chaînesDans un projet, de grandes tables d'enregistrements étaient exportées ligne par ligne avec l'opérateur s = s & Line, effectuant plus de 10 000 itérations. La performance chutait fortement avec de grands volumes.
Avantages :
Inconvénients :
Nous avons remplacé la concaténation par StringBuilder, en assemblant tout le texte et en le transformant en chaîne une seule fois après la boucle.
Avantages :
Inconvénients :