Ero merkkijonon ja StringBuilderin välillä

Tässä artikkelissa String vs StringBuilder, molemmat edustavat merkistöjä, ensimmäinen ero niiden välillä on String-luokka järjestelmän nimitilassa, kun taas StringBuilder on järjestelmässä. Tekstin nimiavaruus.

Suurin ero on:

Merkkijono on muuttumaton : Kun olet luonut merkkijonon, et voi muuttaa sitä. Jos muutat merkkijonon arvoa, se pitää vanhan ilmentymän ja luo uuden ilmentymän, jolla on uusi arvo muistiin.

StringBuilder on muuttuva : Jos muutat merkkijonon arvoa StringBuilderillä, se ei luo uutta ilmentymää, vaan päivittää arvon olemassa olevassa ilmentymässä.

Head to Head -vertailu String vs StringBuilder (Infographics)

Alla on 8 parasta vertailua Stringin ja StringBuilderin välillä :

Keskeiset erot String vs StringBuilder -sovellusten välillä

Keskustelemme joustavista eroista String vs StringBuilderin välillä seuraavissa kohdissa:

1. Työskennellessäsi String-luokan kanssa, joka kerta kun suoritat joitain toimintoja merkkijonollesi, luot koko merkkijonon uudestaan ​​ja uudestaan, kun taas StringBuilder varaa muistissa jonkin verran puskuritilaa ja tekee muutoksia siihen puskuritilaan.

2. Koska StringBuilder-objekti on muutettavissa, se tarjoaa paremman suorituskyvyn verrattuna merkkijono-esineeseen, kun kyseessä ovat raskaat merkkijono-manipulaatiot.

Ymmärtäkäämme yllä olevat kohdat alla olevan esimerkin avulla:

Koodi:

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

lähtö:

3. Merkkijono-operaatiot käyttävät enemmän muistia verrattuna StringBuilder -sovellukseen, koska merkkijono luo välitöntä roska-esiintymää jokaisen operaation jälkeen. Katsokaamme tämä alla olevassa esimerkissä:

Koodi:

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

lähtö:

Kuvaesitys yllä olevan ohjelman sisäisestä toiminnasta:

4. Merkkijono-objekteja voidaan käyttää lankojen yli, kun taas StringBuilder-objektit eivät ole langanpitäviä. Siten kaksi tai useampi säie voi kutsua StringBuilder-menetelmiä samanaikaisesti.

5. Koska merkkijonoobjektit ovat säiettä turvallisia, ne tarjoavat synkronoinnin, kun taas StringBuilder ei tarjoa synkronointia.

6. Merkkijonoa käytetään, kun merkkijonon arvo pysyy vakiona koko ohjelman ajan tai kun siihen tarvitaan hyvin vähemmän muutoksia, kun taas StringBuilderiä käytetään, kun merkkijonoon tarvitaan useita toistuvia modifikaatioita tai raskaita toimintoja.

7. Hyvin pienemmässä yhdistämismäärässä String-luokka toimii nopeammin kuin StringBuilder, koska merkkien sijoittaminen puskuritilaan ja sitten koko arvon muuntaminen merkkijonoksi luo lisäkustannuksia. Siksi pienessä määrässä liittämistä, StringBuilder toimii hitaammin kuin merkkijono-luokan kopio-arvoinen käyttäytyminen.

8. Jos haluat muuntaa String-objektin StringBuilder-objektiin, joudumme siirtämään String-objektin StringBuilder-luokan rakentajalle, kun taas StringBuilder-objekti voidaan muuntaa Stringiksi ToString () -menetelmällä.

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

Vertailutaulukko String vs StringBuilder

Seuraavassa taulukossa on yhteenveto vertailusta String vs StringBuilder :

Parametri jono StringBuilder
nimiavaruusMerkkijono on järjestelmän nimiavaruudessa.StringBuilder-luokka on Järjestelmäteksti-nimitilassa.
mutabilityString-luokan avulla luotu merkkijono on muuttumaton.StringBuilder -sovelluksella luotu merkkijono on muutettavissa.
EsitysHidas verrattuna StringBuilderiin.Nopea verrattuna kieliin. Kuten se on jousia nopeampi, samalla kun yhdistetään useita jousia silmukkaan.
Kierteiden turvallisuusSäieturvallinen.Ei lankavarma.
tahdistusTarjoaa synkronoinnin.Se ei tarjoa synkronointia.
Muistin käyttöVaatii lisää muistia uuden ilmentymän luomiseksi, jos merkkijonoon suoritetut toimenpiteet muuttavat sen arvoa.Se vaatii vähemmän muistia, koska se päivittää olemassa olevan ilmentymän.
Kohteen luonneJousiobjekti on luettavissa vain luonteeltaan.StringBuilderin esine on luonteeltaan dynaaminen.
tehokkuusJousiluokka on vähemmän tehokas verrattuna StringBuilderiin työskennellessään suuren määrän merkkijonojen ketjutusten kanssa.StringBuilder on tehokkaampi verrattuna kieliin työskennellessään suurella määrällä merkkijonojen liittämistä.

johtopäätös

Merkkijono luo uuden ilmentymän vain, kun merkkijonon arvo muuttuu. Jos suoritat tiettyjä toimintoja merkkijonolla, joka ei muuta sen arvoa, merkkijonolla ei luoda uutta esiintymää. Kaikilla tai useammilla merkkijonoilla, joilla on sama sisältö, voi olla sama muistipaikka.

Suositellut artikkelit

Tämä on opas Stringin ja StringBuilderin välisiin eroihin. Tässä keskustellaan myös String vs StringBuilder -erot infografioiden ja vertailutaulukon kanssa. Saatat myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. 7 suosituinta salauslaitetyyppiä
  2. StringBuilderin edut C #: ssä
  3. StringBuffer vs. StringBuilder | 4 suosituinta vertailua
  4. Suurimmat erot - Jira vs Github