Erinevus keelpillide ja keelpillide vahel

Selles artiklis String vs StringBuilder tähistavad mõlemad tähemärkide järjestust, esimene erinevus nende vahel on see, et Stringi klass asub süsteemi nimeruumis, StringBuilder aga süsteemis. Teksti nimeruum.

Peamine erinevus on:

String on muutumatu : kui olete stringi eksemplari loonud, ei saa te seda muuta. Kui muudate stringi väärtust, säilitab see vana eksemplari ja loob uue eksemplari uue väärtusega mällu.

StringBuilder on muutuv : kui muudate stringi väärtust StringBuilderi abil, ei loo see uut eksemplari, vaid värskendab olemasoleva eksemplari väärtust.

String vs StringBuilder (infograafika) võrdlus peaga

Allpool on 8 parimat võrdlust Stringi ja StringBuilderi vahel :

String vs StringBuilder peamised erinevused

Arutleme järgmiste punktide põhilisi erinevusi String vs StringBuilder vahel:

1. String-klassiga töötades taasloote iga kord oma stringil mõne toimingu tegemisel kogu mälu ikka ja jälle uuesti, samas kui StringBuilder eraldab mälus puhverruumi ja rakendab selles puhverruumis muudatusi.

2. Kuna objekt StringBuilder on muudetav, tagab see parema jõudluse võrreldes Stringiobjektiga, kui tegemist on raskete stringi manipulatsioonidega.

Mõistagem ülaltoodud punkte allpool toodud näite abil:

Kood:

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

Väljund:

3. Stringitoimingud kasutavad StringBuilderiga võrreldes rohkem mälu, kuna String loob pärast iga toimingut vahepealseid prüginäiteid. Vaatame seda allpool toodud näites:

Kood:

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

Väljund:

Pilt ülaltoodud programmi sisemisest tööst:

4. Stringiobjekte saab kasutada lõimede vahel, samas kui StringBuilder-objektid pole keermekindlad. Seega saavad kaks või enam lõime korraga helistada StringBuilderi meetoditele.

5. Kuna stringiobjektid on niidikindlad, pakuvad need sünkroonimist, samas kui StringBuilder ei paku sünkroonimist.

6. Stringiklassi kasutatakse juhul, kui stringi väärtus püsib kogu programmi vältel muutumatuna või kui selle jaoks on vaja teha väga vähem modifikatsioone; StringBuilderit kasutatakse juhul, kui stringi tegemiseks on vaja teha palju korduvaid muudatusi või raskeid toiminguid.

7. Väga väikse arvu liitmike korral töötab String-klass kiiremini kui StringBuilder, kuna tähemärkide mahutamine puhverruumi ja kogu väärtuse teisendamine uuesti stringiks loob üldkulusid. Seega töötab StringBuilder väikese arvu liitumiste korral aeglasemalt, võrreldes Stringi klassi eksemplari väärtuse järgi.

8. Stringi objekti teisendamiseks objektiks StringBuilder peame String objekti edastama StringBuilder klassi konstruktorile, samas kui StringBuilder objekti saab teisendada Stringiks, kasutades meetodit ToString ().

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

Stringi ja StringBuilderi võrdlustabel

Allolev tabel võtab kokku Stringi ja StringBuilderi võrdlused :

Parameeter Keel StringBuilder
NimeruumStringiklass asub süsteemi nimeruumis.Klass StringBuilder asub süsteemiteksti nimeruumis.
MutuvusKlassi String abil loodud keel on muutumatu.StringBuilderi abil loodud string on muudetav.
EtendusVõrreldes StringBuilderiga aeglane.Kiire võrreldes keelpillidega. Nagu see on kiirem kui keelpill, samal ajal ühendades mitu stringi silmusena.
Keerme ohutusKeermekindel.Pole niitkindel.
SünkrooniminePakub sünkroonimist.See ei paku sünkroonimist.
Mälu kasutamineUue eksemplari loomiseks on vaja rohkem mälu, kui stringiga tehtavad toimingud muudavad selle väärtust.See nõuab vähem mälu, kuna värskendab olemasolevat eksemplari.
Objekti olemusKeelobjekt on oma olemuselt kirjutuskaitstud.StringBuilderi objekt on olemuselt dünaamiline.
TõhususStringiklass on vähem tõhus kui StringBuilder, töötades suure hulga keelpillide liitmikega.StringBuilder on Stringiga võrreldes efektiivsem, kui töötab suure hulga stringide liitmikega.

Järeldus

String loob uue eksemplari alles siis, kui stringi väärtus muutub. Kui teete stringil teatud toiminguid, mis ei muuda selle väärtust, siis stringi abil uusi eksemplare ei looda. Kahel või enamal sama sisuga stringi tähtpildil võib olla sama mälukoht.

Soovitatavad artiklid

See on juhend String vs StringBuilder peamiste erinevuste kohta. Siin käsitleme ka peamisi erinevusi String vs StringBuilder infograafika ja võrdlustabeliga. Võite lisateabe saamiseks vaadata ka järgmisi artikleid -

  1. 7 peamist šifri tüüpi
  2. Eelised StringBuilder C #
  3. StringBuffer vs StringBuilder | 4 parimat võrdlust
  4. Suurimad erinevused - Jira vs Github

Kategooria: