anti-keseronokan (old)
Fun Stuff for Anti-Fun People
This blog has moved to http://ikhwanhayat.net
Thursday, August 25, 2005
Gunakanlah StringBuilder Utk Menyambung String
Satu entry bertajuk Never fail an interview question about System.String or StringBuilder again !!!! di blog Sahil Malik ni mengingatkan aku pasal teknik menyambung string dlm .NET. String data is usually stored in System.String object. Biasalah tu. Dan bila nak sambung dua string (append or concatenate) biasanya kita pakai symbol "+" seperti ini:
string foo = "Mahukah awak " + "minum saya?";Tapi, mengikut blog entry tersebut (dan juga banyak artikel lagi yg dah aku baca dulu), System.String ni special sikit, ia adalah object tapi dia tak bersifat dgn sifat2 reference type (dlm .NET ada 2 jenis type; value dan reference). Ia adalah "immutable object". Bila assignment dilakukan (umpukan, tanda "="), biasanya pembolehubah reference type sebelah kiri akan copy the reference dari sebelah kanan (copy "memory address", mcm pointer la utk org2 C/C++). Tapi object String ni special sikit, dia akan make a whole copy of the original object, not just the reference. Ini bermaksud, ada new object instantiation, ada extra memory allocation dah berlaku. Instead of appending the "minum saya" string onto the "Mahukah awak " string, it will allocate a new string and put into it the combination of both. And again make a new copy of the new string and put it in the variable foo. Alamak, ter"speaking" pulak, susah la nak terang dlm BM :) Object instantiation will cost some overhead, jadi tak berapa bagus la buat selalu. Tapi kalau setakat dua string tak kisah sgt. Bila byk string yg ingin disambung, dan dibuat berulang2 maka jadi lembab la sikit code kita.
string bar = "Sejak saya " + "jumpa awak, " +
"tidur " + "tak lena, " +
"makan " + "tak kenyang.";
Kalau dah pjg mcm ni, tentu byk new string object yg dicipta. Cara yg lebih baik ialah menggunakan System.Text.StringBuilder. Code di atas boleh ditulis sebagai:
StringBuilder sb = new StringBuilder("Sejak saya ");
sb.Append("jumpa awak, ");
sb.Append("tidur ");
sb.Append("tak lena, ");
sb.Append("makan ");
sb.Append("tak kenyang.");
//utk tukar pada System.String
string foobar = sb.ToString();
StringBuilder object di instantiate sekali shj, string2 lain akan di append pada object tadi. Panjang la sikit, tapi takpe lah bersusah2 sedikit demi performance ye dak.
Pelik kan String dlm .NET ni? Tapi sebenarnya dibuat begini utk memudahkan user jugak. Boleh anggap String mcm value type biasa. Ini khususnya memudahkan seperti dlm isu "shallow copy" versus "deep copy".
p.s: Alamak, ingat nak tulis pendek je, jadi pjg pulak. Took some office hour for this, sorry ye boss :P

13 Comments:
This comment has been removed by a blog administrator.
oooh i hate spams..
This comment has been removed by a blog administrator.
siyut, baru delete satu dah dtg spam lain!
This comment has been removed by a blog administrator.
This comment has been removed by a blog administrator.
This comment has been removed by a blog administrator.
This comment has been removed by a blog administrator.
This comment has been removed by a blog administrator.
'oooh i hate spams.. '
sblm buka aku ingatkn ramai gak respon isu string ko ni. isu jgk rupanya string ni ye(kataku dlm hati). rupa2nya, spam daaa.. :D
whuhu.. byknya spam.. apahal2 tiba2 kena comment spam mcm ni plak..
StringBuilder dgn String? Function tu macam Java gak, tp Java pakai StringBuffer, semua syntax sama.
Java pakai method StringBuffer.append(String string)
Oho, String dlm Java pun immutable jugak ke? (aku tak berapa paham apa sebenarnya 'mutable' nih). Classes dlm .NET mmg byk yg sama dgn Java..
Java: StringBuffer and StringBuilder
Post a Comment
<< Home