[解決済み] String.Join vs. StringBuilder: どっちが速い?
質問
で
前の質問
の書式設定について
double[][]
をCSV形式に変換してください。
が提案されました。
を使用することが提案されました。
StringBuilder
を使う方が
String.Join
. これは本当でしょうか?
どのように解決するのですか?
簡単な答え:それは依存します。
長い答え
という文字列の配列がすでにあり、それを(デリミタで)連結する場合。
String.Join
が最速の方法です。
String.Join
は、すべての文字列に目を通して必要な長さを計算し、もう一度行ってすべてのデータをコピーすることができます。これはつまり
はありません。
余分なコピーが発生しないことを意味します。また
のみ
の欠点は、文字列を2回通過しなければならないことで、メモリキャッシュを必要以上に消費してしまう可能性があります。
もしあなたが
しない
があらかじめ文字列を配列として持っている場合、それは
おそらく
を使う方が速いでしょう。
StringBuilder
- を使う方が速いかもしれませんが、そうでない状況もあるでしょう。もし
StringBuilder
を使うことがたくさんのコピーをすることを意味するなら、配列を構築して
String.Join
の方が速いかもしれません。
EDIT: これは、1回の呼び出しで
String.Join
への呼び出しがたくさんある場合に対して
StringBuilder.Append
. 元の質問では、2つの異なるレベルの
String.Join
の呼び出しがあったので、ネストされた呼び出しのそれぞれで中間文字列が作成されたはずです。つまり、さらに複雑で、推測するのが難しいのです。典型的なデータで、どちらの方法でも "win"(複雑さの点で)大幅に勝てるというのは驚きです。
EDIT: 家にいるときに、できるだけ苦痛にならないベンチマークを書きます。
StringBuilder
. 基本的に、各要素が前の要素の約 2 倍の大きさの配列があり、それをうまく使うと、追加するたびに強制的にコピーできるはずです(区切り文字ではなく要素の、それも考慮しなければなりませんが)。この時点で、単純な文字列の連結とほぼ同じになります。
String.Join
は何の問題もありません。
関連
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み] VB.NETでファイル名を一意のサフィックスに変更するには?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜlist.join(string)ではなくstring.join(list)なのでしょうか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] Java の toString() における 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み] WCF エラーの解決。このサービスのメタデータパブリッシングは現在無効になっています。
-
[解決済み] SQL Server Compact EditionデータベースのLINQ to SQLで、"Row not found or changed "例外を解決するにはどうすればよいですか?
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法
-
[解決済み】文字列を連結する最も効率的な方法は?
-
[解決済み] なぜString.Formatを使用するのですか?重複
-
[解決済み] List<int> からカンマ区切り文字列への変換