DA0001: StringBuilder を使用して連結してください
規則 ID |
DA0001 |
[カテゴリ] |
.NET Framework の使用 |
プロファイル方法 |
サンプリング インストルメンテーション |
Message |
StringBuilder を使用して文字列を連結することを検討してください。 |
メッセージの種類 |
[警告] |
原因
System.String.Concat の呼び出しがプロファイル データの大きな割合を占めています。StringBuilder クラスを使用して、複数のセグメントからの文字列を連結することを検討してください。
規則の説明
String オブジェクトは変更できないオブジェクトです。このため、文字列に変更を加えると、新しい文字列オブジェクトと元のオブジェクトのガベージ コレクションが作成されます。この動作は、String.Concat を明示的に呼び出しても、+ や += などの文字列連結演算子を使用しても同じです。これらのメソッドが頻繁に呼び出される場合 (文字列への文字の追加が短いループ内で発生する場合など)、プログラムのパフォーマンスが低下することがあります。
StringBuilder クラスは System.String とは異なり、変更可能なオブジェクトであるため、このクラスのインスタンスを変更する StringBuilder のメソッドの大多数はその同じインスタンスへの参照を返します。StringBuilder インスタンスには、文字を挿入したり、テキストを付加することができ、新しいインスタンスを割り当てたり、元のインスタンスを削除しなくても、インスタンスの文字を削除または置換することができます。
警告の調査方法
[エラー一覧] ウィンドウに表示されたメッセージをダブルクリックして、サンプリング プロファイル データの関数の詳細ビューに移動します。文字列連結を最も頻繁に使用するプログラムをセクションを特定します。頻繁な文字列連結など、複雑な文字列操作には StringBuilder クラスを使用します。
文字列の操作の詳細については、Microsoft patterns & practices ライブラリの「第 5 章 - マネージ コード パフォーマンスの向上」のセクション「文字列処理」を参照してください。