Különbség a String vs StringBuilder között

Ebben a cikkben a String vs StringBuilder mindkettő a karakter sorozatot ábrázolja, az első különbség közöttük a String osztály a rendszer névtérében található, míg a StringBuilder a Systemben. Szöveg névtér.

A fő különbség a következő:

A karakterlánc változatlan : A karakterlánc példányának létrehozása után nem módosíthatja. Ha megváltoztatja a karakterlánc értékét, akkor ez megtartja a régi példányt, és létrehoz egy új példányt új értékkel a memóriában.

A StringBuilder változtatható: Ha a StringBuilder használatával megváltoztatja a string értékét, akkor nem hoz létre új példányt, hanem frissíti az értéket a meglévő példányban.

Összehasonlítás a fej és a fej között a String vs StringBuilder (Infographics) között

Az alábbiakban a String és a StringBuilder 8 legfontosabb összehasonlítását találjuk :

Legfontosabb különbségek a String vs StringBuilder között

Beszéljünk néhány fontosabb különbségről a String vs StringBuilder között a következő pontokban:

1. A String osztály használata közben minden egyes művelet végrehajtása után újra és újra létrehozza a memóriában a teljes karakterláncot, míg a StringBuilder egy kis pufferhelyet foglal el a memóriában, és módosítást hajt végre ezen a pufferhelyen.

2. Mivel a StringBuilder objektum változtatható, jobb teljesítményt nyújt a String objektumhoz képest, ha nehéz karakterlánc-manipulációkkal jár.

Megértjük a fenti pontokat az alábbiakban bemutatott példa segítségével:

Kód:

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

Kimenet:

3. A karakterláncműveletek több memóriát használnak, mint a StringBuilder, mivel a karakterlánc minden művelet után köztes szemétpéldányokat hoz létre. Lássuk ezt az alábbi példában:

Kód:

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

Kimenet:

A fenti program belső működésének képi ábrázolása:

4. A húrobjektumok szálakon keresztül használhatók, míg a StringBuilder objektumok nem biztonságosak a szálon. Így két vagy több szál egyszerre hívhatja meg a StringBuilder metódusokat.

5. Mivel a karakterlánc-objektumok szálbiztosak, szinkronizálást biztosítanak, míg a StringBuilder nem biztosít szinkronizálást.

6. A karakterlánc osztály akkor használatos, ha a karakterlánc értéke változatlan marad a program során, vagy ha nagyon kevesebb módosításra van szükség, míg a karakterláncot akkor használják, ha a karakterláncon sok ismételt módosítás vagy nehéz művelet szükséges.

7. Nagyon kevesebb összekapcsolás esetén a String osztály gyorsabban működik, mint a StringBuilder, mivel a karakterek beillesztése a puffertérbe, majd az egész érték újból karakterlánccá történő konvertálása felülterhelést eredményez. Így a kis összekapcsolások száma esetén a StringBuilder lassabban működik, mint a String osztály érték-másolati viselkedése.

8. A String objektum StringBuilder objektummá való konvertálásához át kell adnunk a String objektumot a StringBuilder osztály kivitelezőjéhez, míg a StringBuilder objektumot átalakíthatjuk Stringbe ToString () módszerrel.

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

A String vs StringBuilder összehasonlító táblázata

Az alábbi táblázat összefoglalja a String vs StringBuilder összehasonlításait :

Paraméter Húr StringBuilder
névtérA karakterlánc osztály a Rendszer névterében található.A StringBuilder osztály a Rendszerszöveg névtérben található.
mutabilityA String osztály használatával létrehozott szöveg változatlan.A StringBuilder segítségével létrehozott karakterlánc módosítható.
TeljesítményLassú a StringBuilderhez képest.Gyors, mint a String. Mint gyorsabb, mint a húrok, miközben sok húrot hurokban összefűz.
MenetbiztonságSzálbiztosak.Nem menetbiztos.
összehangolásSzinkronizálást biztosít.Nem nyújt szinkronizálást.
MemóriahasználatTovábbi memóriára van szükség egy új példány létrehozásához, ha a karakterláncon végrehajtott műveletek megváltoztatják annak értékét.Kevesebb memóriát igényel, mivel frissíti a meglévő példányt.
A tárgy jellegeA Karakterlánc tárgya csak olvasható jellegű.A StringBuilder objektuma dinamikus jellegű.
HatékonyságA húrok osztálya kevésbé hatékony a StringBuilderhez képest, miközben nagy számú karakterlánc-összekapcsolással dolgozik.A StringBuilder sokkal hatékonyabb a String-hez képest, miközben számos húrkonkatenációval dolgozik.

Következtetés

A karakterlánc csak akkor hoz létre új példányt, ha a karakterlánc értéke megváltozik. Ha olyan műveleteket hajt végre a karakterláncon, amely nem változtatja meg annak értékét, akkor a karakterlánc nem hoz létre új példányokat. Két vagy több azonos tartalmú karakterláncnak lehet ugyanaz a memória helye.

Ajánlott cikkek

Ez egy útmutató a String vs StringBuilder közötti legnagyobb különbséghez. Itt is megvitatjuk a String vs StringBuilder kulcsfontosságú különbségeket az infographics és az összehasonlító táblázat segítségével. Lehet, hogy megnézi a következő cikkeket is, ha többet szeretne megtudni -

  1. A 7 legnépszerűbb titkosító típus
  2. A StringBuilder előnyei a C # -ben
  3. StringBuffer vs StringBuilder | A 4 legjobb összehasonlítás
  4. Legfontosabb különbségek - Jira vs Github

Kategória: