Building strings
-
I was a bit sceptic about the
StringBuilder
class of .NET and always used+
and+=
to concatenate strings. Know I saw with my own two eyes the difference between the two... :omg:. For creating about 2MB of text and writing to a file it was a difference of MINUTES ! (It was a complex method with recursive calling etc...) (Well, better find out late then never...) (I was doing this with my old method and was surprised that it was so slow... for the 'fun' of it I tried theStringBuilder
) So if your app is slow and you're using the+
and+=
way... this is your solution...
V. Stop smoking so you can: enjoy longer the money you save.
If you have to alter very big strings StringBuilder is the way to go. But for small strings the border where StringBuilder is faster than the String.xxx functions becomes a moving target: http://www.codeproject.com/useritems/StringBuilder_vs_String.asp Yours, Alois Kraus
-
I was a bit sceptic about the
StringBuilder
class of .NET and always used+
and+=
to concatenate strings. Know I saw with my own two eyes the difference between the two... :omg:. For creating about 2MB of text and writing to a file it was a difference of MINUTES ! (It was a complex method with recursive calling etc...) (Well, better find out late then never...) (I was doing this with my old method and was surprised that it was so slow... for the 'fun' of it I tried theStringBuilder
) So if your app is slow and you're using the+
and+=
way... this is your solution...
V. Stop smoking so you can: enjoy longer the money you save.
The reason why this is the case is that strings in .NET (just like in Java), are immutable objects. That means that the underlying memory buffer is locked, and will not allow modifications.
String s = "ab"; s += "c";
is equivalent toString s = "ab"; s = s + "c"
which in turn is equivalent toString s = "ab"; String temp = s + "c"; s = temp;
. Each append generates a new object. StringBuilder however, is a mutable object, meaning that the underlying character array is modified when you issue an append command - no temporary objects are created. The reason why strings are immutable is that you can do a fair amount of optimizations on strings, which will improve performance - given that you do not misuse them of course. :)-- Presented in doublevision (where drunk)
-
I was a bit sceptic about the
StringBuilder
class of .NET and always used+
and+=
to concatenate strings. Know I saw with my own two eyes the difference between the two... :omg:. For creating about 2MB of text and writing to a file it was a difference of MINUTES ! (It was a complex method with recursive calling etc...) (Well, better find out late then never...) (I was doing this with my old method and was surprised that it was so slow... for the 'fun' of it I tried theStringBuilder
) So if your app is slow and you're using the+
and+=
way... this is your solution...
V. Stop smoking so you can: enjoy longer the money you save.
I think I read somewhere that StringBuilder is not a class that you could write in managed C# or VB. It is managed C# but It uses string internals which are not available to us. This result in a much better memory management. I had a look at the source, and I believe it is an awfully long winded. Anyway It is MUCH better than using +. This said I have seen people using StringBuilder to concatenate 2 strings and show the result in a message box. I think it is a bit over the top, stringbuilder beat the + operator when .append is used repeatidly on the same stringbuilder. What the point of saving 0.1 millisecond to display a messagebox. Overall in the long run code clarity is as important as speed, I would recommend to use stringbuilder when you concatenate 3 items or more.
-
StringBuilder
was added to Java 1.5. :) http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html[^]
Kicking squealing Gucci little piggy.
The Rob BlogSo they have the thread safe StringBuffer and the non-thread safe StringBuilder, both with identical functionality. Yeah, that's not confusing. :rolleyes:
Tech, life, family, faith: Give me a visit. I'm currently blogging about: God-as-Judge, God-as-Forgiver The apostle Paul, modernly speaking: Epistles of Paul Judah Himango
-
That's funny. I guess its been a while since I've used Java. ;) I guess Microsoft and Sun borrow class names from each other now.
Matt Gerrans
MS probably copied it from Java :-)
"a fool will not learn from a wise man, but a wise man will learn from a fool" "It is hard to fail, but it is worse never to have tried to succeed." - Theodore Roosevelt "Success is going from failure to failure without losing your enthusiasm." - Winston Churchill
-
LOL, but this is a microsoft site ;-). Java is against the rules ;p
V.
Stop smoking so you can: Enjoy longer the money you save. Moviereview ArchiveV. wrote:
but this is a microsoft site
*looks around* I don't recall seeing anywhere that stated this site ONLY dealt with Microsoft products. In fact, I've seen several questions/comments on here dealing with compiling code with Intel C++, GCC, and Borland ... and even some using Linux ;P
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac
-
MS probably copied it from Java :-)
"a fool will not learn from a wise man, but a wise man will learn from a fool" "It is hard to fail, but it is worse never to have tried to succeed." - Theodore Roosevelt "Success is going from failure to failure without losing your enthusiasm." - Winston Churchill
cykophysh39 wrote:
MS probably copied it from Java
Not likely. StringBuilder was part of .Net long before Java 1.5 was released. Sun and Microsoft are going back and forth with their library support, so don't be surprised when you see similar classes doing similar things coming from both of them. When one does it, the other will soon copy it.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac
-
So they have the thread safe StringBuffer and the non-thread safe StringBuilder, both with identical functionality. Yeah, that's not confusing. :rolleyes:
Tech, life, family, faith: Give me a visit. I'm currently blogging about: God-as-Judge, God-as-Forgiver The apostle Paul, modernly speaking: Epistles of Paul Judah Himango
There's a lot of stuff like that in Java. ArrayList<T> and Vector<T> are interchangeable. One of them is thread safe. Go figure.
Once you wanted revolution
Now you're the institution
How's it feel to be the man? -
There's a lot of stuff like that in Java. ArrayList<T> and Vector<T> are interchangeable. One of them is thread safe. Go figure.
Once you wanted revolution
Now you're the institution
How's it feel to be the man?David Stone wrote:
There's a lot of stuff like that in Java. ArrayList and Vector are interchangeable. One of them is thread safe. Go figure.
:doh:
Tech, life, family, faith: Give me a visit. I'm currently blogging about: God-as-Judge, God-as-Forgiver The apostle Paul, modernly speaking: Epistles of Paul Judah Himango
-
V. wrote:
but this is a microsoft site
*looks around* I don't recall seeing anywhere that stated this site ONLY dealt with Microsoft products. In fact, I've seen several questions/comments on here dealing with compiling code with Intel C++, GCC, and Borland ... and even some using Linux ;P
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac