Forskjellen mellom String vs StringBuilder

I denne artikkelen String vs StringBuilder, begge representerer sekvensen av tegn, den første forskjellen mellom dem er String-klassen er i systemnavnområde mens StringBuilder er i System. Tekstens navneområde.

Den største forskjellen er:

Streng er uforanderlig : Når du oppretter en forekomst av streng, kan du ikke endre den. Hvis du endrer verdien på strengen, vil dette beholde den gamle forekomsten og opprette en ny forekomst med ny verdi i minnet.

StringBuilder er mutable : Hvis du endrer verdien på strengen ved hjelp av StringBuilder, vil den ikke opprette en ny forekomst i stedet oppdaterer den verdien i den eksisterende forekomsten.

Head to Head Sammenligning mellom String vs StringBuilder (Infographics)

Nedenfor er de 8 beste sammenligningene mellom String og StringBuilder :

Viktige forskjeller mellom String vs StringBuilder

La oss diskutere noen viktige forskjeller mellom String vs StringBuilder på følgende punkter:

1. Mens du arbeider med String-klassen, gjenskaper du hele strengen i minnet om og om igjen, hver gang du utfører noen operasjoner på strengen, mens StringBuilder tildeler noen bufferplass i minnet og bruker endringer i denne bufferen.

2. Ettersom StringBuilder-objekt er mutabelt, gir det bedre ytelse sammenlignet med String-objekt når tunge strengmanipulasjoner er involvert.

La oss forstå ovenstående punkter ved hjelp av et eksempel gitt nedenfor:

Kode:

using System;
using System.Text;
using System.Diagnostics;
public class StringAndStringBuilder
(
static void Main()
(
//using Stopwatch to calculate time
Stopwatch stopWatch = new Stopwatch();
string str = string.Empty;
//starting stop watch
stopWatch.Start();
for (int i = 0; i < 1000; i++)
(
str += i.ToString();
)
stopWatch.Stop();
Console.WriteLine("Time taken by string : (0)", stopWatch.Elapsed);
StringBuilder stringBuilder= new StringBuilder(string.Empty);
//restarting stop watch for StringBuilder
stopWatch.Restart();
for (int i = 0; i < 1000; i++)
(
stringBuilder.Append(i.ToString());
)
stopWatch.Stop();
Console.WriteLine("Time taken by StringBuilder : (0)", stopWatch.Elapsed);
)
)

Produksjon:

3. Strengeoperasjoner bruker mer minne sammenlignet med StringBuilder fordi String skaper mellomliggende søppelforekomster etter hver operasjon. La oss se dette i eksemplet nedenfor:

Kode:

using System;
using System.Text;
using System.Runtime.Serialization;
public class StringAndStringBuilder
(
public static void Main()
(
//using ObjectIDGenerator to generate ID for objects
ObjectIDGenerator idGenerator1 = new ObjectIDGenerator();
bool flag = new bool();
String str = "Sun";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
//flag will be True for new instance otherwise it will be False
Console.WriteLine("This instance is new : (0)\n", flag);
//concatenating strings
str += " rises";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " in";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " the";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
str += " east";
Console.WriteLine("String = (0)", str);
Console.WriteLine("Instance Id : (0)", idGenerator1.GetId(str, out flag));
Console.WriteLine("this instance is new : (0)\n", flag);
//initializing string using StringBuilder
StringBuilder stringBuilder = new StringBuilder("Sun");
ObjectIDGenerator idGenerator2 = new ObjectIDGenerator();
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" rises");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" in");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" the");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
stringBuilder.Append(" east");
Console.WriteLine("StringBuilder = (0)", stringBuilder);
Console.WriteLine("Instance Id : (0)", idGenerator2.GetId(stringBuilder, out flag));
Console.WriteLine("This instance is new : (0)\n", flag);
Console.ReadKey();
)
)

Produksjon:

Bildefremvisning av det interne arbeidet med ovennevnte program:

4. Strengobjekter kan brukes på tvers av tråder, mens StringBuilder-objekter ikke er trådsikre. Dermed kan to eller flere tråder kalle StringBuilder-metoder samtidig.

5. Siden strengobjekter er tråd-sikre, gir de synkronisering mens StringBuilder ikke gir synkronisering.

6. Strengklasse brukes når verdien av strengen skal forbli konstant gjennom hele programmet, eller når det er veldig færre endringer som kreves på den, mens StringBuilder brukes når mange gjentatte modifikasjoner eller tunge operasjoner er nødvendige for å utføre på strengen.

7. For et veldig mindre antall sammenkoblinger, fungerer String-klassen raskere sammenlignet med StringBuilder, fordi det å plassere tegn på bufferplass og deretter konvertere hele verdien til streng igjen, skaper overhead. For det lille antallet sammenkjøringer fungerer StringBuilder dermed tregere sammenlignet med kopi-etter-verdien-oppførselen til String-klassen.

8. For å konvertere String-objektet til StringBuilder-objektet, må vi sende String-objektet til StringBuilder-klassekonstruktøren, mens StringBuilder-objektet kan konverteres til String ved hjelp av ToString () -metoden.

String str = “abc”;
StringBuilder StringBuilder = new StringBuilder(str);
StringBuilder StringBuilder = new StringBuilder(“abc”);
String str = StringBuilder.ToString();

Sammenligning Table of String vs StringBuilder

Tabellen nedenfor oppsummerer sammenligningene mellom String vs StringBuilder :

Parameter string Stringbuilder
namespaceStrengklassen er i systemnavnområdet.StringBuilder-klassen er i systemtekstens navneområde.
mutabilityStreng laget med strengklasse er uforanderlig.Streng opprettet ved hjelp av StringBuilder er mutbar.
OpptredenSakte sammenlignet med StringBuilder.Rask sammenlignet med String. Som om det er raskere enn String mens du kobler mange strenger sammen i en loop.
Tråd sikkerhetTråd-safe.Ikke trådsikker.
synkroniseringTilbyr synkronisering.Det gir ikke synkronisering.
MinnebrukKrever mer minne for å opprette en ny forekomst hvis operasjoner utført på streng endrer verdien.Det krever mindre minne når den oppdaterer den eksisterende forekomsten.
Objektets naturObjekt med streng er skrivebeskyttet i naturen.Formålet med StringBuilder er dynamisk i naturen.
EffektivitetStringklassen er mindre effektiv sammenlignet med StringBuilder mens du arbeider med et stort antall strengknapper.StringBuilder er mer effektiv sammenlignet med String mens du arbeider med et stort antall strengknapper.

Konklusjon

Streng oppretter ny forekomst bare når verdien til streng endres. Hvis du utfører visse operasjoner på streng som ikke endrer verdien, vil det ikke være noen ny instansoppretting av streng. To eller flere strenglitterater med samme innhold kan ha samme minneplassering.

Anbefalte artikler

Dette er en guide til den største forskjellen mellom String vs StringBuilder. Her diskuterer vi også String vs StringBuilder viktige forskjeller med infografikk og sammenligningstabell. Du kan også se på følgende artikler for å lære mer -

  1. Topp 7 typer chiffer
  2. Fordelene med StringBuilder i C #
  3. StringBuffer vs StringBuilder | Topp 4 sammenligning
  4. Topp forskjeller - Jira vs Github