Razlika med String proti StringBuilder

V tem članku oba String proti StringBuilder predstavljata zaporedje znakov, prva razlika med njima je, da je razred String v sistemskem imenu, medtem ko je StringBuilder v sistemu. Besedilni imenik besedila.

Glavna razlika je:

String je nespremenljiv : Ko ustvarite primerek Stringa, ga ne morete spremeniti. Če spremenite vrednost niza, bo to ohranilo stari primerek in ustvarilo nov primerek z novo vrednostjo v pomnilniku.

StringBuilder je spremenljiv : Če spremenite vrednost niza s pomočjo StringBuilder, ne bo ustvaril novega primerka, temveč bo posodobil vrednost v obstoječem primerku.

Primerjava med glavo in nizom String proti StringBuilder (Infographics)

Spodaj je zgornjih 8 primerjav med String in StringBuilder :

Ključne razlike med String proti StringBuilder

Pogovorimo se o nekaterih ključnih razlikah med String proti StringBuilder v naslednjih točkah:

1. Ko delate z razredom String, vsakič, ko izvajate nekaj operacij na svojem nizu, znova in znova ustvarite celoten niz v pomnilniku, medtem ko StringBuilder dodeli nekaj prostora v pomnilniku in v ta prostor vnese spremembe.

2. Ker je objekt StringBuilder spremenljiv, zagotavlja boljše delovanje v primerjavi s objektom String, kadar gre za težke nizove manipulacije.

Razumejmo zgornje točke s pomočjo spodnjega primera:

Koda:

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

Izhod:

3. String operacije uporabljajo več pomnilnika v primerjavi s StringBuilder, ker String ustvari vmesne primere smeti po vsaki operaciji. Poglejmo to v spodnjem primeru:

Koda:

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

Izhod:

Slikovni prikaz notranjega delovanja zgornjega programa:

4. String predmeti se lahko uporabljajo v niti, medtem ko predmeti StringBuilder niso varni z nitmi. Tako lahko dve ali več niti hkrati pokliče StringBuilder metode.

5. Ker so String predmeti varni po nitkah, zagotavljajo sinhronizacijo, medtem ko StringBuilder ne zagotavlja sinhronizacije.

6. String razred se uporablja, kadar bo vrednost niza ostala ves čas programa ali ko je v njem potrebnih zelo malo sprememb, medtem ko se StringBuilder uporablja, če je za izvedbo niza potrebno veliko ponovljenih modifikacij ali težkih operacij.

7. Pri zelo manjšem številu konkatenacij razred String deluje hitreje v primerjavi s StringBuilder, ker namestitev znakov v medpomnilniški prostor in nato ponovno pretvoritev celotne vrednosti v niz ustvari režijske stroške. Tako StringBuilder pri majhnem številu sporočil deluje počasneje v primerjavi z vedenjem razreda String za kopiranje po vrednosti.

8. Za pretvorbo predmeta String v objekt StringBuilder moramo objekt String posredovati konstruktorju razreda StringBuilder, medtem ko lahko StringBuilder objekt pretvorimo v String po metodi ToString ().

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

Primerjalna tabela String vs StringBuilder

Spodnja tabela povzema primerjave med String proti StringBuilder :

Parameter Vrvica StringBuilder
Imenski prostorRazred niza je v sistemskem imenem prostoru.Razred StringBuilder je v imenskem prostoru sistemskega besedila.
SpremenljivostNiz, ustvarjen z razredom String, je nespremenljiv.Niz, ustvarjen s programom StringBuilder, je spremenljiv.
IzvedbaPočasi v primerjavi z StringBuilder.Hiter v primerjavi z String. Všeč je, da je hitrejši kot String, medtem ko povezuje veliko strun v zanki.
Varnost navojevNiti varno.Ni varno z navojem.
SinhronizacijaZagotavlja sinhronizacijo.Ne omogoča sinhronizacije.
Uporaba pomnilnikaZa ustvarjanje novega primerka potrebuje več pomnilnika, če operacije, izvedene v nizu, spremenijo svojo vrednost.Za posodabljanje obstoječega primerka potrebuje manj pomnilnika.
Narava predmetaPredmet String je v naravi samo za branje.Predmet StringBuilder je po naravi dinamičen.
UčinkovitostRazred niza je v primerjavi z StringBuilderjem manj učinkovit pri delu z velikim številom nizov.StringBuilder je v primerjavi z String bolj učinkovit, če delate z velikim številom nizov.

Zaključek

String ustvari nov primerek le, ko se vrednost niza spremeni. Če izvedete določene operacije v nizu, ki ne spremeni njegove vrednosti, potem String ne bo ustvaril novega primerka. Dve ali več strukturnih slovnic z isto vsebino ima lahko isto pomnilniško mesto.

Priporočeni članki

To je vodnik za največjo razliko med String proti StringBuilder. Tukaj razpravljamo tudi o ključnih razlikah String vs StringBuilder z infografiko in primerjalno tabelo. Za več informacij si lahko ogledate tudi naslednje članke -

  1. Najboljših 7 vrst šifr
  2. Prednosti StringBuilder v C #
  3. StringBuffer proti StringBuilder | Top 4 Primerjava
  4. Najboljše razlike - Jira proti Github