« 黄砂ではないのか? | トップページ | 次男幼稚園三百二十四日目 »

2011.02.08

墓碑と河馬の嗚咽

プログラム実行中に文字列変数などを使って長い文字列を作るときによく使われる、ドットネットで言うところの StringBuilder 、Java でいうところの StringBuffer ですが、先日お客さんに「なんでこれが速いの?」と聞かれてざっくりご説明した。

簡単に言えば、固定文字列型の文字列編集処理では、いちいちメモリの確保や開放、そしてコピーが行われて、頻繁に文字列を追加していくような処理では、それなりに処理速度が低下するってことですね。メモリの確保や開放は通常OSに対する要求で、それなりに遅いので。メモリの断片化もしやすいかも。

一方、StringBuilderなどは編集用に余分にメモリを確保しているため、メモリの再確保や開放が発生しにくい。またコピーも最小限の回数で済むように設計されている。だから速いはず・・・

でーすーがー、

細かいことを知らずに、単に「文字列をつなげるときはStringBuilderを使う」とバカのひとつおぼ盲目的に信奉していて、むしろ処理速度の低下を招いていそうなコードも、よく見かけます。

上の説明をしたときに、開いていたソースがまさにそういう部分でして、実行時に動的に変化しないSQLを行単位で分割して、何度も何度もStringBufferにApendしてる・・・。オマケに行末には改行コードを足しているw

昨年の業爆中に若い子が必死で書いたコード(今回ワタシはそれの改造)なので、目をつぶるけど、このソースを見ながらお客さんから「これでホントに速くなるんですか?」と聞かれて返答に困ったw。「いやーそのー」みたいなw

動的に(プログラム実行中に)変化しないのなら固定文字列で事足りる。これはコンパイル時に評価されて実質的な処理速度はゼロ・・・のはず。だよな?

じゃーどれくらい遅いのか?と聞かれれば、それほど遅くも無いだろうけどね。

最適化によって固定文字列に置き換えられる可能性もあるから、気持ちの問題ということかな。てことなら、この記事の意味が無いw。可読性とメンテ性はアップアップ・・・

« 黄砂ではないのか? | トップページ | 次男幼稚園三百二十四日目 »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 墓碑と河馬の嗚咽:

« 黄砂ではないのか? | トップページ | 次男幼稚園三百二十四日目 »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント