Stringbuilder vs Strings

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Can some one suggest me as why StringBuilder class is better than Strings?
 
Can some one suggest me as why StringBuilder class is better than Strings?

Its not better, it serves a different purpose. Use StringBuilder when
you have a lot of strings to concatinate, as the SB performs
concatination and other string manipulation operations faster than
using a standard string class.
 
It should be said that you should use StringBuilder to concatenate when
you don't exactly know how many strings you are going to concatenate. The
best example is when you have N number of strings and you need to append it
all together in a loop.

If you have a known number of strings, then using the concatenation
operator will work just fine, as it will compile to a call to the static
Concat method on the string class, which is very fast (it pre-allocates the
return buffer, and then does a memory copy of the strings into the
appropriate locations in the return buffer).

Hope this helps.
 
It should be said that you should use StringBuilder to concatenate when
you don't exactly know how many strings you are going to concatenate. The
best example is when you have N number of strings and you need to append it
all together in a loop.

If you have a known number of strings, then using the concatenation
operator will work just fine, as it will compile to a call to the static
Concat method on the string class, which is very fast (it pre-allocates the
return buffer, and then does a memory copy of the strings into the
appropriate locations in the return buffer).

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)


Its not better, it serves a different purpose. Use StringBuilder when
you have a lot of strings to concatinate, as the SB performs
concatination and other string manipulation operations faster than
using a standard string class.

Hello,

String class is immutable. Meaning any changes made to the reference
you have to a String object (such as concatenations), will be made on
a copy of the reference. Thus, as Nicholas mentioned, N strings
concatenations will allocate N strings for each concatenation.

StringBuilder uses double capacity allocation method, decreasing
allocation performance issues and assuring O(1) allocation complexity,
and it's better for multiple changes on a single string based objects
for the reasons mentioned above.

The following example will be much better using StringBuilder:

// This method will create almost 100000 String instances
String s = "MyName";
for( int i=0; i<100000; ++i)
s+=i.ToString();


// This will use only one instance and will allocate the space needed
for each append, efficiently. Much much better..
StringBuilder sb = new StringBuilder(s);
for( int i=0; i<100000; ++i)
sb.Append(i.ToString());

You can even make it better if you can predict the capacity prior to
making the changes. This will make sure allocation is made only when
necessary.

Hope it helps :)
 
Hello,

String class is immutable. Meaning any changes made to the reference
you have to a String object (such as concatenations), will be made on
a copy of the reference. Thus, as Nicholas mentioned, N strings
concatenations will allocate N strings for each concatenation.

Correction: N string concatenations will allocate N strings, ONE for
each concatenation, not N for each contatenation. The example that
followed gave the correct numbers.
 
In simple, when you use the Strings manipulation, Boxing and unboxing
happens. Where as when you use the Stringbuilder, as it clearly knows that
deals with Chars, so CLR will not undergo all the conversion and allocation
of extra memory bla.. bla..

HTH
 
Chakravarthy said:
In simple, when you use the Strings manipulation, Boxing and unboxing
happens.

No it doesn't. Consider this example:

string x = "hello";
x += "there";

Where do you believe the boxing is?
Where as when you use the Stringbuilder, as it clearly knows that
deals with Chars, so CLR will not undergo all the conversion and allocation
of extra memory bla.. bla..

String knows it's dealing with chars as well. Allocation is indeed the
issue, but not because of conversion or boxing. See
http://pobox.com/~skeet/csharp/stringbuilder.html
 
I've had to point my coworkers to Jon's StringBuilder page in the last five
jobs I've had.

///ark
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top