String of the type System.String is immutable in the .Net Framework. That means any change to a String causes the runtime to create a new string and abandon the
old one. Guess how many string references following code will create?
//c#
String s;
s= "one"; //"one"
s += " two"; //"one two"
s += " three"; //"one two three"
s += " four"; //"one two three four"
Console.WriteLine(s);
If you guessed it four, you are right. Most developers think this is only one string. After running the code only the last string has a reference, the other three are
disposed off during garbage collection. Avoiding these kind of temporary string helps avoiding unnecessary garbage collection and hence helps improve performance.
There are several ways to avoid temporary string
1. Use the Concat, Join or Format method of the String Class to join multiple items into a single statment.
2. Use StringBuilder Class to create dynamic(mutable) strings.
StringBuilder is most suitable solution as it can span multiple statments. Default buffer size is 18 bytes but you can specify the size as per your requirment. This buffer grows as needed.
//c#
System.Text.StringBuilder sb = new System.Text.StringBuilder(30);
sb.Append("one");
sb.Append(" two");
sb.Append(" three");
sb.Append(" four");
string s = sb.ToString(); //copy result to string
Console.WriteLine(s);
old one. Guess how many string references following code will create?
//c#
String s;
s= "one"; //"one"
s += " two"; //"one two"
s += " three"; //"one two three"
s += " four"; //"one two three four"
Console.WriteLine(s);
If you guessed it four, you are right. Most developers think this is only one string. After running the code only the last string has a reference, the other three are
disposed off during garbage collection. Avoiding these kind of temporary string helps avoiding unnecessary garbage collection and hence helps improve performance.
There are several ways to avoid temporary string
1. Use the Concat, Join or Format method of the String Class to join multiple items into a single statment.
2. Use StringBuilder Class to create dynamic(mutable) strings.
StringBuilder is most suitable solution as it can span multiple statments. Default buffer size is 18 bytes but you can specify the size as per your requirment. This buffer grows as needed.
//c#
System.Text.StringBuilder sb = new System.Text.StringBuilder(30);
sb.Append("one");
sb.Append(" two");
sb.Append(" three");
sb.Append(" four");
string s = sb.ToString(); //copy result to string
Console.WriteLine(s);
Comments