Most
of the people use
string
everywhere in their code.
Actually when doing string
concatenation,
do you know what exactly you are doing? It has a big drawback mainly in
concatenation which can be overcome by StringBuilder
. It will give a vast improvement in performance
when you use concatenation of string
over
String
. What is the Exact Difference?
First
we will look at what happens when you concatenate two
string
s. For a rough idea, think like this. In a loop,
you are adding few numbers to get a string
to
give all the numbers.
string returnNumber = "";
for(int i = 0; i<1000; i++)
{
returnNumber = returnNumber + i.ToString();
}
Here
we are defining a
string
called returnNumber
and after that, in the loop we are concatenating
the old one with the new to get a string
.
Do you know when we do like that we are assigning it again and again? I mean
it's really like assigning 999 new string
s!
Actually
the concatenation will create a new
string returnNumber
, with both old returnNumber
and i.ToString()
. If we think roughly, how will the performance
of the code be? Can you imagine it? No one thinks about this when coding.
If
we can have something which is to be defined only once and add all
the
string
s into it, what can you say about the
performance. That's what StringBuilder
does.
StringBuilder returnNumber = new StringBuilder(10000);
for(int i = 0; i<1000; i++)
{
returnNumber.Append(i.ToString());
}
We
are creating a
StringBuilder
of length 10000
in memory where we can add all the string
s. This surely won't create a new string
each and every time. Actually we are creating a StringBinder
, and whenever something is added it will get
copied into that memory area. At the end, we can get the string
by StringBuilder.ToString()
. Here also, it won't create a new string
. It will return a string
instance that will point to the string
inside the StringBuilder
. See, how efficient this is?Why String? Can't Use StringBinder Everywhere?
No.
You can't. When initializing a
StringBuilder
, you are going down in performance. Also many actions that you do
with string
can't be done with StringBinder
. Actually it is used mostly for situations as
explained above. If you using StringBuilder
to just add two string
s together! It's really nonsense. We must really
think about the overhead of initialization. In my personal experience, a StringBuilder
can be used where more than four or more string
concatenations take place. Also if you try to do
some other manipulation (like removing a part from the string
, replacing a part in the string
, etc.), then it's better not to use StringBuilder
at those places. This is because we are anyway
creating new string
s. Another important issue. We must be careful to
guess the size of StringBuilder
. If the size which we are going to get is more
than what is assigned, it must increase the size. This will
reduce its performance.
String is immutable. It means that you can't modify
string at all, the result of modification is new string. This is not effective
if you plan to append to string
System.Text;
StringBuilder is mutable. It can be modified in any way and it
doesn't require creation of new instance. When work is done, ToString() can be
called to get the string.
Ref: http://codeproject.com/
No comments:
Post a Comment