dポイントプレゼントキャンペーン実施中!

StringBuilderを使って文字列連結して、それをSQL文(String型)として利用するプログラムを作りました。

※SQLはループ処理で約10万個ぐらい発行→実行します

StringBuilderの文字列を、最終的にString型の変数(strSql)に代入するのですが、
下記のどちらで代入する方がコスト掛からないでしょうか?


A案.
----------
StringBuilder sb = new StringBuilder();

sb.append(変数a);
sb.append(変数b);
sb.append(変数c);

String sqlStr = new String(sb);
----------


B案.
----------
StringBuilder sb = new StringBuilder();

sb.append(変数a);
sb.append(変数b);
sb.append(変数c);

String sqlStr = sb.toString();
----------

教えてください。

A 回答 (3件)

↓だって。

速さならtoString()の方がいいみたいよ。

String

public String(StringBuilder builder)

文字列ビルダー引数に現在含まれている文字列を持つ新しい文字列を割り当てます。文字列ビルダーの内容がコピーされます。 コピー後に文字列ビルダーが変更されても、新しく作成された文字列には影響しません。

このコンストラクタを使用すると、StringBuilder に移行しやすくなります。toString メソッドを使って文字列ビルダーから文字列を取得するのは、処理が高速になるので一般的に推奨されています。

パラメータ:
builder - StringBuilder
導入されたバージョン:
1.5
    • good
    • 0

たった10万回しかまわさないのであれば全く気にする必要は無いと思いますけど。



私の6年前のPCで実行したところ、どちらも0.15秒程度で有意な差はありませんでした。
それぞれ5回くらいしか試してませんけど。
    • good
    • 0

ちょっと質問の意図とは離れるかもしれませんが、気になるのでひとつ。



使用しているDBはなんでしょうか?
同じようなSQLで項目が違うだけならば、パラメータを使用した方が、高速になるような気がします。

ご検討あれ。

この回答への補足

別々のシステムですが、オラクルとポスグレの二つで作ってます。

確かにパラメータの方がインジェクション対応としても優れているとは思うのですが、
テーブル名が可変(テーブル名はパラメータ化不可能)というのと、
あとはタイムスタンプ型への変換などでうまくいかなかったので今回は全部StringBuilderでやってしまいました。

補足日時:2011/11/04 18:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!