Monday 17 April 2017

Difference between String and StringBuilder in .Net

In this post, I will explain what is the difference between String and StringBuilder in .Net.

In daily practice, most of the people use a string in their code. When someone doing string concatenation again and again it creates those many new instances of strings. But we can overcome this drawback of the string by using StringBuilder. Here I will explain this with an example.

1. String

A string is immutable, Immutable means if you create string object then you cannot modify it and it always creates a new instance of String type in memory. Any operation like insert, replace or append happened to change String, it will discard the old value and it will create a new instance in memory to hold the new value. This creates a performance issue. String belongs to System namespace.

Example - 

string AllNo =  "";

for(int i = 0;  i < 10;  i++)
    AllNo = AllNo + i.ToString();

}

In an example, we are defining a string called AllNo and in a loop, we are concatenating the old string with new to get a string with a list of all No. Whenever we do such things like assigning it again and again. It creates a new instance of a string every time. In this case, it will create 9 more instances of a String.


2. StringBuilder

StringBuilder is mutable. If we create a StringBuilder object then we can perform any operation like insert, replace or append without creating a new instance for every time. Whenever something is changed it will get copied into the same memory areaStringBuilder belongs to System.Text namespace.

By default StringBuilder capacity is only 16 characters! So if we keep on appending more than 16 characters, the original StringBuilder object will be discarded and a new one with double the capacity will be generated internally.

If we know at least an approximate number of characters will be storing in the StringBuilder then it is always a good practice to define StringBuilder with desired capacity.

Example -

StringBuilder AllNo= new StringBuilder(100);

for(int i = 0;  i < 10;  i++)
    AllNo.Append(i.ToString());

}

In an example, we are defining a StringBuilder called AllNo with capacity 100 where we can add all strings. In a loop, we are appending the string with StringBuilder to get a string with a list of all No. Here it won't create a new string, it will return a string instance that will point to the string inside the StringBuilder.

But we cannot use StringBuilder every time. When initializing a StringBuilder, we are going down in performance. Also, many actions that we do with string can't be done with StringBinder. Actually, it should be used mostly for situations as explained in an example.

0 comments:

Post a Comment

Please do not enter any spam link in the message box.