Разлика между String срещу StringBuilder

В тази статия String срещу StringBuilder и двете представляват последователността на знаците, първата разлика между тях е, че класът String е в системното пространство на имена, докато StringBuilder е в System. Текстово пространство на имената.

Основната разлика е:

String е неизменяем : След като създадете екземпляр на String, не можете да го промените. Ако промените стойността на низа, това ще запази стария екземпляр и ще създаде нов екземпляр с нова стойност в паметта.

StringBuilder е изменяем : Ако промените стойността на низ чрез StringBuilder, той няма да създаде нов екземпляр, а вместо това ще актуализира стойността в съществуващия екземпляр.

Сравнение между главата на String срещу StringBuilder (Инфографика)

По-долу са първите 8 сравнения между String и StringBuilder :

Ключови разлики между String срещу StringBuilder

Нека да обсъдим някои ключови разлики между String срещу StringBuilder в следните точки:

1. Докато работите с клас String, всеки път, когато извършвате някои операции на вашия низ, пресъздавате целия низ в паметта отново и отново, докато StringBuilder разпределя малко място в паметта и прилага модификации в това буферно пространство.

2. Тъй като StringBuilder обектът е сменяем, той осигурява по-добра производителност в сравнение с обект String, когато са ангажирани тежки стринг манипулации.

Нека разберем горните точки с помощта на пример, даден по-долу:

Код:

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

изход:

3. Струнните операции използват повече памет в сравнение със StringBuilder, защото String създава междинни случаи на боклук след всяка операция. Нека видим това в следния пример:

Код:

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

изход:

Изобразително представяне на вътрешната работа на горната програма:

4. String обекти могат да се използват в нишки, докато StringBuilder обекти не са безопасни за нишки. По този начин две или повече нишки могат да извикат StringBuilder методите едновременно.

5. Тъй като String обекти са безопасни за конци, те осигуряват синхронизация, докато StringBuilder не осигурява синхронизация.

6. String class се използва, когато стойността на низа ще остане постоянна в цялата програма или когато са необходими много по-малко модификации в нея, докато StringBuilder се използва, когато са необходими многократни модификации или тежки операции за изпълнение на низ.

7. За много по-малък брой конкатенации, класът String работи по-бързо в сравнение със StringBuilder, тъй като настаняването на символи в буферното пространство и след това отново преобразуването на цялата стойност в низ, създава режийни разходи. По този начин, за малкия брой конкатенации, StringBuilder работи по-бавно в сравнение с поведението при копиране по стойност на клас String.

8. За да преобразуваме String обекта в StringBuilder обекта, трябва да предадем String обекта на конструктора на клас StringBuilder, докато StringBuilder обектът може да бъде преобразуван в String с помощта на метода ToString ().

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

Таблица за сравнение на String vs StringBuilder

Таблицата по-долу обобщава сравненията между String срещу StringBuilder :

параметър низ StringBuilder
Именно пространствоКласът на низовете е в системното пространство на имената.Класът StringBuilder е в пространството от имена на System Text.
изменчивостString, създаден с помощта на клас String, е неизменен.String, създаден с помощта на StringBuilder, е изменяем.
производителностБавно в сравнение със StringBuilder.Бързо в сравнение със String. Като че ли е по-бързо от String, докато обединява много струни заедно в цикъл.
Безопасност на резбатаТема-безопасно.Не е безопасен за конци.
синхронизацияОсигурява синхронизация.Не осигурява синхронизация.
Използване на паметтаИзисква повече памет за създаване на нов екземпляр, ако операциите, извършвани на низ, променят стойността си.Тя изисква по-малко памет, тъй като актуализира съществуващия екземпляр.
Характер на обектаОбектът на String е само за четене.Обектът на StringBuilder е динамичен по своята същност.
ЕфективностКласът на струните е по-малко ефективен в сравнение с StringBuilder, докато работите с голям брой струнови конкатенации.StringBuilder е по-ефективен в сравнение със String, докато работи с голям брой струнови конкатенации.

заключение

String създава нов екземпляр само когато стойността на низ се променя. Ако извършите определени операции на низ, който не променя стойността му, няма да има създаване на нов екземпляр от String. Две или повече струнни литерали с едно и също съдържание може да имат едно и също място в паметта.

Препоръчителни статии

Това е ръководство за най-високата разлика между String срещу StringBuilder. Тук също обсъждаме ключовите разлики на String срещу StringBuilder с инфографиката и таблицата за сравнение. Може да разгледате и следните статии, за да научите повече -

  1. Топ 7 вида шифър
  2. Предимства на StringBuilder в C #
  3. StringBuffer срещу StringBuilder | Топ 4 сравнение
  4. Топ разлики - Jira vs Github