Werken met strings is een van de meest voorkomende taken in Visual Basic. In de geschiedenis van de taal was het type String oorspronkelijk bedoeld als een handig aanpasbaar (mutable) object, maar werd later geïmplementeerd als onveranderlijk (immutable) om de betrouwbaarheid en veiligheid bij herhaaldelijke gegevensverwerking te verbeteren. Het belangrijkste probleem is dat bij elke concateneratieoperatie, wanneer strings worden toegevoegd met + of &, een nieuw object wordt gecreëerd - wat de prestaties beïnvloedt bij het werken met grote hoeveelheden tekst, bijvoorbeeld bij het genereren van rapporten of logs.
De oplossing was het gebruik van een speciale klasse genaamd StringBuilder, die het efficiënt mogelijk maakt om een string te 'bouwen', met minimale geheugenallocaties en gegevenskopieën. Intern houdt deze klas een buffer bij die dynamisch wordt uitgebreid wanneer dat nodig is, en het resultaat kan worden verkregen met een enkele aanroep van ToString().
Voorbeeldcode:
Dim sb As New System.Text.StringBuilder() For i As Integer = 1 To 10000 sb.Append("Regel " & i & vbCrLf) Next dim result As String = sb.ToString()
Kernkenmerken:
String — waarden zijn onveranderlijk, elke toewijzing creëert een nieuwe string in het geheugen.StringBuilder — efficiënt voor frequente wijzigingen, geschikt voor het concatenëren van grote hoeveelheden gegevens.+ of & is handig voor kleine en zeldzame operaties.Waarom gedragen "+" en "&" zich soms anders bij het verbinden van strings?
De operator + kan leiden tot ongewilde typeconversie, als een van de operanden een getal of een ander type is. De operator & concateneert strikt strings, zelfs als de operand geen string is (deze wordt geconverteerd).
Dim a As String = "5" Dim b As Integer = 10 Dim s1 = a + b ' Dit wordt 15 vanwege de optelling van getallen! Dim s2 = a & b ' Dit wordt "510", omdat er een concatenatie van strings plaatsvindt
Kan StringBuilder langzamer zijn dan String?
Ja, voor kleine strings (bijvoorbeeld 2-3 operaties) en zeldzame wijzigingen kan StringBuilder te zwaar zijn — dan is gewone concatenatie qua snelheid vergelijkbaar of zelfs sneller vanwege de lagere belasting van het geheugen.
Kun je een string op index wijzigen in Visual Basic?
Nee, strings zijn onveranderlijk - je kunt het teken op een index niet direct wijzigen. Je moet een nieuw object aanmaken:
Dim str As String = "test" str = str.Substring(0, 1) & "A" & str.Substring(2) ' Nu is str = "tAst"
In een project werden grote tabellen met records regel voor regel geëxporteerd met behulp van de operator s = s & Regel, waarbij 10.000+ iteraties werden uitgevoerd. De prestaties daalden sterk bij grote hoeveelheden.
Voordelen:
Nadelen:
We vervingen de concatenatie door StringBuilder, waarbij we de gehele tekst verzamelden en deze pas één keer na de lus in een string omzetten.
Voordelen:
Nadelen: