C# : When exactly should a StringBuilder be used?

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

Guest

Hi!

I'm very interesting in when to use exactly the StringBuilder?

For example for something like this?:

String strTest1 = "This";
String strTest2 = "Test";
StringBuilder stbTest = new StringBuilder();
stbTest.Append(strTest1). Append("is a "). Append(stbTest);


can someone provide some sample codes when to use a StringBuilder?

And can someone tell me his experience about the performance of a
StringBuilder?


Regards,


gicio
 
A StringBuilder's main functionality is , as it's name implies, to build
strings. The fact is, in .Net, if you need to build a long string (using a
long loop for example) it would be much slower to accomplish by using
simple concatenation than it would be using a StringBuilder.
The speed improvement is very big. This is because internally, the
StringBuilder uses string pointers for concatenation, while a regular
concat operation actually creates a new string from each two concatenated
string, so if you do "a" + "b" you actually get 3 seperate string back,
a,c, and the result. in a loop doing this this is very slow. A
StringBuilder does not create new string instances and so is much faster.
When to use: Whenever you have a non trivial string that you need to build
dynamically using a loop (when creating XML strings for example).

Roy Osherove
http://www.iserializable.com
 
Hello!
When to use: Whenever you have a non trivial string that you need to build
dynamically using a loop (when creating XML strings for example).

When building Xml; Try to use the specific writers (e.g. the XmlTextWriter).
They support indented writing and helps you programatically write more
readably (and maintainable) code.

Otherwise the StringBuilder is a powerful class.
 
StringBuilder is more efficient when you do string concatenating, especially
when you do that a lot vs. using += operator.

Jianjun
 
Doesn't that depend on the size of the strings being concatenated? The
longer the strings, the more memory to be copied ..
 
Doesn't that depend on the size of the strings being concatenated? The
longer the strings, the more memory to be copied ..

Yep - that's why there is no precise number of operations where it can be
said StringBuilder is better. Somewhere between 3 and 8 is what I have seen
in benchmarks, so my general recommendation is once you're at 10,
StringBuilder is definitely the way to go. The performance difference
between the two options is not dramatic till you start doing lots of
operations, so there is no point worrying about whether 4 or 7 is the
optimum number for a particular case.

Nick
 
Aside from the other answers you've received, sometimes depending on what
you're doing it's actually better to use a memory stream. In some cases
you'll get 50-200% speed improvements. But we're talking *large* strings =)
 
What about doing lots of small operations? One could incur the overhead of
creating a stringbuilder, then clear it after each small operation (say
contat of 5 strings.) Ala:

sb.append(str1)
sb.append(str2)
(etc)
response.write(sb.tostring)
sb.remove(0, sb.length)

sb.append(newstr1)
sb.append(newstr2)

etc.


Thoughts?

-- russ
 
Back
Top