Rozdiel medzi reťazcom a reťazcom StringBuilder

V tomto článku String vs StringBuilder predstavujú postupnosť znakov, prvý rozdiel medzi nimi je trieda String v názvovom priestore System, zatiaľ čo StringBuilder je v systéme. Textový menný priestor.

Hlavný rozdiel je:

Reťazec je nemenný : Po vytvorení inštancie reťazca ho nemôžete zmeniť. Ak zmeníte hodnotu reťazca, zachová sa pôvodná inštancia a vytvorí sa nová inštancia s novou hodnotou v pamäti.

StringBuilder je Meable : Ak zmeníte hodnotu reťazca pomocou StringBuilder, nevytvorí novú inštanciu, ale aktualizuje hodnotu v existujúcej inštancii.

Porovnanie medzi jednotlivými reťazcami medzi reťazcom a reťazcom StringBuilder (infografika)

Nižšie je uvedených 8 najlepších porovnaní medzi reťazcami String a StringBuilder :

Kľúčové rozdiely medzi reťazcom String vs StringBuilder

Poďme diskutovať o niektorých kľúčových rozdieloch medzi String vs StringBuilder v nasledujúcich bodoch:

1. Pri práci s triedou String zakaždým, keď na svojom reťazci vykonávate nejaké operácie, znova a znova vytvárajte celý reťazec v pamäti, zatiaľ čo StringBuilder v pamäti prideľuje určitý vyrovnávací priestor a do tohto vyrovnávacieho priestoru aplikuje zmeny.

2. Keď je objekt StringBuilder zameniteľný, poskytuje lepší výkon v porovnaní s objektom String, keď sa jedná o manipulácie s ťažkými reťazcami.

Pochopme vyššie uvedené body pomocou nasledujúceho príkladu:

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

Výkon:

3. Operácie String využívajú viac pamäte v porovnaní so StringBuilder, pretože String vytvára po každej operácii stredné inštancie odpadu. Pozrime sa na to v nasledujúcom príklade:

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

Výkon:

Obrazové znázornenie vnútorného fungovania vyššie uvedeného programu:

4. Reťazcové objekty sa dajú použiť vo viacerých vláknach, zatiaľ čo objekty StringBuilder nie sú bezpečné pre vlákna. Dve alebo viac vlákien tak môžu volať StringBuilder metódy súčasne.

5. Pretože objekty String sú bezpečné pre vlákna, poskytujú synchronizáciu, zatiaľ čo StringBuilder neposkytuje synchronizáciu.

6. Trieda String sa používa, keď hodnota reťazca zostane konštantná počas celého programu alebo keď sú na ňom potrebné veľmi malé úpravy, zatiaľ čo StringBuilder sa používa, keď sa na reťazci vyžaduje veľa opakovaných úprav alebo ťažkých operácií.

7. Pri veľmi menšom počte zreťazení pracuje trieda String v porovnaní so StringBuilder rýchlejšie, pretože prispôsobenie znakov v medzipamäte a opätovné prevedenie celej hodnoty na reťazec vytvára réžiu. Pri malom počte zreťazení tak StringBuilder pracuje pomalšie v porovnaní so správaním triedy String za jednotlivé hodnoty.

8. Na konverziu objektu String na objekt StringBuilder je potrebné objekt String odovzdať konštruktorovi triedy StringBuilder, zatiaľ čo objekt StringBuilder je možné pomocou metódy ToString () previesť na reťazec.

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

Porovnávacia tabuľka String vs StringBuilder

V nasledujúcej tabuľke sú zhrnuté porovnania medzi reťazcom String vs StringBuilder :

parameter povrázok StringBuilder
namespaceTrieda reťazcov je v priestore názvov systémov.Trieda StringBuilder je v mennom priestore System Text.
premenlivosťReťazec vytvorený pomocou triedy String je nemenný.Reťazec vytvorený pomocou StringBuilder je zameniteľný.
výkonPomalý v porovnaní s StringBuilder.Rýchly v porovnaní s reťazcom String. Je to rýchlejšie ako reťazec String a zároveň spája veľa reťazcov do jednej slučky.
Bezpečnosť vláknaThread-safe.Nie je bezpečný pre nite.
synchronizáciaPoskytuje synchronizáciu.Neposkytuje synchronizáciu.
Využitie pamäteVyžaduje viac pamäte na vytvorenie novej inštancie, ak operácie vykonané na reťazci zmenia jeho hodnotu.Aktualizácia existujúcej inštancie vyžaduje menej pamäte.
Povaha objektuObjekt String má povahu len na čítanie.Objekt StringBuilder je svojou povahou dynamický.
efektívnosťTrieda String je v porovnaní s StringBuilder menej účinná pri práci s veľkým počtom zreťazení reťazcov.StringBuilder je pri práci s veľkým počtom zreťazení reťazcov účinnejší v porovnaní s reťazcom String.

záver

Reťazec vytvorí novú inštanciu iba vtedy, keď sa zmení hodnota reťazca. Ak vykonávate určité operácie v reťazci, ktorý nemení svoju hodnotu, nebude existovať žiadna nová inštancia pomocou reťazca. Dva alebo viac reťazcových literálov s rovnakým obsahom môžu mať rovnaké umiestnenie v pamäti.

Odporúčané články

Toto je sprievodca po najvyššom rozdiele medzi reťazcom String vs StringBuilder. Tu tiež diskutujeme o kľúčových rozdieloch typu String vs StringBuilder s informačnou a porovnávacou tabuľkou. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Top 7 typov šifry
  2. Výhody StringBuilder v jazyku C #
  3. StringBuffer vs Top 4 Porovnanie
  4. Najlepšie rozdiely - Jira vs Github

Kategórie: