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ér | A karakterlánc osztály a Rendszer névterében található. | A StringBuilder osztály a Rendszerszöveg névtérben található. |
mutability | A 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ény | Lassú a StringBuilderhez képest. | Gyors, mint a String. Mint gyorsabb, mint a húrok, miközben sok húrot hurokban összefűz. |
Menetbiztonság | Szálbiztosak. | Nem menetbiztos. |
összehangolás | Szinkronizálást biztosít. | Nem nyújt szinkronizálást. |
Memóriahasználat | Tová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 jellege | A Karakterlánc tárgya csak olvasható jellegű. | A StringBuilder objektuma dinamikus jellegű. |
Hatékonyság | A 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 -
- A 7 legnépszerűbb titkosító típus
- A StringBuilder előnyei a C # -ben
- StringBuffer vs StringBuilder | A 4 legjobb összehasonlítás
- Legfontosabb különbségek - Jira vs Github