[解決済み] String.FormatはStringBuilderと同じように効率的か?
質問
C#でこのような文字列構築ソフトがあったとします。
StringBuilder sb = new StringBuilder();
string cat = "cat";
sb.Append("the ").Append(cat).(" in the hat");
string s = sb.ToString();
を持つのと同じくらい、あるいはそれ以上に効率的なのでしょうか?
string cat = "cat";
string s = String.Format("The {0} in the hat", cat);
もしそうなら、なぜ?
EDIT
いくつかの興味深い回答があった後、私はおそらく私が尋ねていたことをもう少し明確にするべきだったことに気づきました。私は、文字列の連結にどちらが速いかを聞いていたのではなく インジェクション という文字列を別の文字列に変換します。
上記のいずれの場合も、定義済みのテンプレート文字列の途中に1つ以上の文字列を注入したいのです。
わかりにくくてすみません
解決方法は?
注意事項 この回答は、.NET 2.0が現在のバージョンであったときに書かれたものです。それ以降のバージョンでは、もはや適用されないかもしれません。
String.Format
は
StringBuilder
を内部で使用しています。
public static string Format(IFormatProvider provider, string format, params object[] args)
{
if ((format == null) || (args == null))
{
throw new ArgumentNullException((format == null) ? "format" : "args");
}
StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
builder.AppendFormat(provider, format, args);
return builder.ToString();
}
上のコードは mscorlib のスニペットなので、問題は "である。
StringBuilder.Append()
よりも高速に
StringBuilder.AppendFormat()
ということですか?
ベンチマークを行わなければ、上記のコードサンプルは、おそらく
.Append()
. しかし、これは推測であり、ベンチマークやプロファイリングを行い、適切な比較をしてみてください。
Jerry Dixonという人がベンチマークをしました。
<ブロッククオートhttp://jdixon.dotnetdevelopersjournal.com/string_concatenation_stringbuilder_and_stringformat.htm
更新しました。
残念ながら、上記のリンクは消滅してしまいました。しかし、Way Back Machineにはまだコピーが残っています。
<ブロッククオート結局のところ、文字列フォーマットが繰り返し呼び出されるのか、つまり、100メガバイト以上のテキストを真剣に処理するのか、それともユーザーが時々ボタンをクリックしたときに呼び出されるのかによって、その方法は異なります。大規模なバッチ処理でない限り、私はString.Formatを使うことにしています。もし、性能のボトルネックがあると思われるなら、プロファイラでコードを調べて、その原因を突き止めましょう。
関連
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み] printf/String.Formatに相当するJavaScriptの機能
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] \0-9]よりも効率が悪い
-
[解決済み] Java の toString() における StringBuilder と文字列連結の比較
-
[解決済み] .NET String.Format()で数値の千の位にカンマを追加する
-
[解決済み] StringBuilderの最後の文字を削除しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み】文字列を連結する最も効率的な方法は?
-
[解決済み】パフォーマンスを重視するならば、JavaのString.format()を使うべき?