Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / CLR / November 2003

Tip: Looking for answers? Try searching our database.

C# : When exactly should a StringBuilder be used?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
- 09 Nov 2003 18:06 GMT
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
Roy Osherove - 09 Nov 2003 18:16 GMT
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

> Hi!
>
[quoted text clipped - 15 lines]
>
> gicio
Anders Borum - 09 Nov 2003 19:23 GMT
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.

Signature

venlig hilsen / with regards
anders borum
--

Jj - 09 Nov 2003 20:42 GMT
StringBuilder is more efficient when you do string concatenating, especially
when you do that a lot vs. using += operator.

> Hi!
>
[quoted text clipped - 15 lines]
>
> gicio
Nick Wienholt - 09 Nov 2003 21:34 GMT
As the number of modification operations heads towards 10 and above,
StringBuilder becomes faster.  If the number of modifications is small (as
it is in your example), String will be faster.

Nick Wienholt, MVP
Maximizing .NET Performance
http://www.apress.com/book/bookDisplay.html?bID=217
> Hi!
>
[quoted text clipped - 15 lines]
>
> gicio
Anders Borum - 09 Nov 2003 23:36 GMT
Doesn't that depend on the size of the strings being concatenated? The
longer the strings, the more memory to be copied ..

Signature

venlig hilsen / with regards
anders borum
--

Nick Wienholt - 09 Nov 2003 23:50 GMT
> 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
Russ Bishop - 15 Nov 2003 19:28 GMT
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

> As the number of modification operations heads towards 10 and above,
> StringBuilder becomes faster.  If the number of modifications is small (as
[quoted text clipped - 22 lines]
> >
> > gicio
Klaus H. Probst - 10 Nov 2003 07:30 GMT
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 =)

Signature

____________________
Klaus H. Probst, MVP

> Hi!
>
[quoted text clipped - 15 lines]
>
> gicio

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.