Forskellen mellem String vs StringBuilder

I denne artikel String vs StringBuilder, begge repræsenterer sekvensen af ​​tegn, den første forskel mellem dem er String-klassen er i systemnavneområde, mens StringBuilder er i System. Tekstnavnsområde.

Den største forskel er:

Streng er uforanderlig : Når du opretter en forekomst af streng, kan du ikke ændre den. Hvis du ændrer værdien på strengen, bevarer dette den gamle instans og skaber en ny instans med ny værdi i hukommelsen.

StringBuilder er mutable : Hvis du ændrer værdien på streng ved hjælp af StringBuilder, opretter den ikke en ny instans i stedet for, den opdaterer værdien i den eksisterende instans.

Head-to-head-sammenligning mellem String vs StringBuilder (Infographics)

Nedenfor er de øverste 8 sammenligninger mellem String og StringBuilder :

Vigtige forskelle mellem String vs StringBuilder

Lad os diskutere nogle af de vigtigste forskelle mellem String vs StringBuilder på følgende punkter:

1. Mens du arbejder med String-klassen, genskaber du hele strengen i hukommelsen igen og igen, hver gang du udfører nogle operationer, hvorimod StringBuilder tildeler en del bufferplads i hukommelsen og anvender ændringer i denne bufferplads.

2. Da StringBuilder-objekt er mutabelt, giver det bedre ydelse sammenlignet med strengobjekt, når der er tale om tunge strengmanipulationer.

Lad os forstå ovenstående punkter ved hjælp af et eksempel givet 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);
)
)

Produktion:

3. Strengehandlinger bruger mere hukommelse sammenlignet med StringBuilder, fordi String skaber mellemliggende affaldsforekomster efter hver operation. Lad os se dette i nedenstående eksempel:

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();
)
)

Produktion:

Billedlig repræsentation af det interne arbejde i ovenstående program:

4. Strengeobjekter kan bruges på tværs af tråde, medens StringBuilder-objekter ikke er gevindsikre. Således kan to eller flere tråde kalde StringBuilder-metoder samtidig.

5. Da strengobjekter er tråd-sikre, giver de synkronisering, mens StringBuilder ikke leverer synkronisering.

6. Strengeklasse bruges, når værdien af ​​strengen forbliver konstant i hele programmet, eller når der er meget færre ændringer påkrævet, mens StringBuilder bruges, når der kræves mange gentagne ændringer eller tunge operationer for at udføre på strengen.

7. For et meget mindre antal sammenhænge fungerer String-klassen hurtigere sammenlignet med StringBuilder, fordi det at rumme tegn i bufferplads og derefter konvertere hele værdien til streng igen skaber overhead. For det lille antal sammenkædninger fungerer StringBuilder således langsommere sammenlignet med kopi-efter-værdien adfærd fra strengklassen.

8. For at konvertere String-objektet til StringBuilder-objektet, er vi nødt til at videregive String-objektet til StringBuilder-klassekonstruktøren, mens StringBuilder-objektet kan konverteres til String ved hjælp af ToString () -metoden.

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

Sammenligningstabel over streng vs StringBuilder

Tabellen nedenfor opsummerer sammenligningerne mellem String vs StringBuilder :

Parameter Snor StringBuilder
navnerumStrengklassen findes i systemnavnet.StringBuilder-klassen findes i systemtekstens navneområde.
foranderlighedStreng oprettet ved hjælp af strengklasse er uforanderlig.Streng oprettet ved hjælp af StringBuilder er mutabel.
YdeevneLangsom sammenlignet med StringBuilder.Hurtigt sammenlignet med streng. Som det er hurtigere end streng, mens du sammenkæder mange strenge sammen i en løkke.
Tråd sikkerhedTråd-safe.Ikke tråd-sikker.
SynkroniseringGiver synkronisering.Det giver ikke synkronisering.
Brug af hukommelseKræver mere hukommelse for at oprette en ny instans, hvis operationer, der udføres på streng, ændrer dens værdi.Det kræver mindre hukommelse, da det opdaterer den eksisterende instans.
Objektets artGenstand for streng er skrivebeskyttet i naturen.Formålet med StringBuilder er dynamisk i naturen.
EffektivitetStringklassen er mindre effektiv sammenlignet med StringBuilder, mens du arbejder med et stort antal strengkoncatenationer.StringBuilder er mere effektiv sammenlignet med String, mens du arbejder med et stort antal strengkoncatenationer.

Konklusion

Streng opretter kun nyt eksempel, når værdien af ​​streng ændres. Hvis du udfører visse operationer på en streng, der ikke ændrer dens værdi, vil der ikke være nogen ny instansoprettelse af streng. To eller flere strenglitterære med det samme indhold kan have den samme hukommelsesplacering.

Anbefalede artikler

Dette er en guide til den største forskel mellem String vs StringBuilder. Her diskuterer vi også String vs StringBuilder vigtige forskelle med infografik og sammenligningstabel. Du kan også se på de følgende artikler for at lære mere -

  1. Top 7 typer af chiffer
  2. Fordele ved StringBuilder i C #
  3. StringBuffer vs StringBuilder | Top 4 sammenligning
  4. Topforskelle - Jira vs Github

Kategori: