|
|
|
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
│<< 前へ │次へ >> │一覧 │コメントを書く |
開発しない人には何のことか分からないネタである。
StringBuilderというのは文字列を連結する機構のことだ。 文字列というのは文字が並んだもののことである。 プログラムではその文字列を更に繋げることが必要となることがある。 C#なら「+」、VBなら「+」か「&」で連結できる。 EXCELでもVBAだから知っている人もいることだろう。 だが、文字列が長くなってくると、これが極端に処理が遅くなる。 連結の方法が連結される元も連結するものも、全部コピーされるからだ。 それに対し、StringBuilderは賢く、ムダなコピーが起きない。 だから速い。 と、妄信している人がいるのである。 確かに、ある程度以上の文字列長になると連結が遅いためStringBuilderは有効である。 しかし、それはかなり長い文字列についてである。 短い文字列の連結は、通常の連結で十分だし、そのためにStringBuilderを使うのはかえって遅くなる。 1次キャッシュ(あるいは2次キャッシュ)内で収まる程度なら不要である。 例えば、CSVファイル1行分毎に連結させるとしよう。 それを関数化したとして、StringBuilderを関数内で定義して処理すると、単純に連結した場合よりかなり遅くなる。 StringBuilderの初期化処理が1行毎に入るからだ。 ならばと、呼び出し側でStringBuilderを定義して関数に引き渡すとしよう。 それでも落とし穴がある。 StringBuilderをコピーして呼び出してしまうからだ。 当然、「ref」をつけて、参照渡しにしなければならない。 これらは意味のない処理を見ていてつくづく思ったのである。 それはStringBuilderを使ってSQL文を作っていた。 実行時には何ら変化がないのに、だ。 これなら定数として定義した方が速い。 というかコンパイルのみなので実行時間は0である。 妄信も甚だしい。 神や仏なら信じるものは救われるのかもしれないが、StringBuilderを妄信しても救われない。 というか救いがたい? │<< 前へ │次へ >> │一覧 │コメントを書く │ 一番上に戻る │ |
|