Are You Sure StringBuilder is Faster?

Published 22 July 06 11:50 PM | adrian

Following some of blog posts saying that StringBuilder is faster than String concatenation, I've done some research on my own.

Most often, what you see is thousand strings concatenated at once. I don't deal with those. I deal with under 10 strings concatenated.

When you do small number of concatenation, for example, create a caption for MessageBox, StringBuilder is slower (although by a small margin).

In fact, I found out that for a 12 character string, 6 string concatenations runs as fast as 6 StringBuilder.Appends. I'll post the testing code when I get my own machine online on Monday.

So for now, I'll stick with String concatenation for my MessageBoxes.

Update 25/07: I have posted the test results in an article here.

Share this post: | | | |
Filed under:

Comments

# adrian said on July 23, 2006 11:14 AM:

StringBuilder itu kaya StringBuffer di Java kah?

yg jelas kalau di Java, kalo ada banyak banget (brapa ya?) String yang mau digabung, make StringBuffer itu jauh-jauh-jauh lebih cepat.

kalau cuma sedikit mah.. IMO, konkatenasi biasa cukup.

# adrian said on July 24, 2006 06:50 AM:

Not just for Perf.

You should also consider memory usage.

Each string concatenation creates new instance of string. Not just append the original string, it creates new string object. While StringBuilder just simply return the already created StringBuilder.

# adrian said on July 24, 2006 07:53 AM:

hehehee..godong ambil kesimpulan sendiri;)...ini dah banyak dibuktikan..StringBuilder ini juga jauh lebih thread safe ketimbang string biasa untuk concate..coba lakukan dimedia aplikasi berbasis multi threading;)

# adrian said on July 24, 2006 10:07 AM:

Wait a minute, guys. Kalian ngga baca tujuannya apa? Gw cuma mau ngegabungin 2 buah string. Apa perlu penggabungan tersebut membuat sebuah Object baru secara eksplisit?

Dari sisi code pun lebih hemat. Compare:

Console.WriteLine("Hello" + "World");

dengan

StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append("World");
Console.WriteLine(sb.ToString());

It just doesn't make any sense to combine two string using a StringBuilder (with all the bells and whistles it got).

# adrian said on July 24, 2006 10:16 AM:

Norman: gw lagi nyoba nyari2 memory usage untuk managed env. Mostly say: kalau memory usage itu ngga bisa diperiksa langsung dari code, karena bla... bla... bla... (things I don't understand).

Dikau punya referensi untuk ngecek size sebuah object ngga? Kalau ada, boleh dong copy2... :D