C++プログラマ キャスブログ
[C#]文字列の加工にはStringBuilderを使いましょう。 2014年11月29日23:08:20
StringBuilderはバッファを確保して処理を行う為、文字列の連結時にメモリの再確保や コンストラクタ・コピーの処理を行わないのでstringで処理するより圧倒的に速いです。 私の環境では60倍程度差が出ました。 使い方はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // StringBuilder作成 // コンストラクタでバッファサイズの指定が可能です。 // 出来上がりの文字数を超える値を設定するとよいでしょう。 StringBuilder sb = new StringBuilder(1024); // 文字列の加工処理Appendメソッドを使います // 基本データ型やフォーマット文字列に対応しています。 sb.Append(true); sb.Append(10); sb.Append('a'); sb.Append(0.1f); sb.Append(0.2); sb.Append("hoge"); sb.AppendFormat("{0}aaa{1}", 999, "piyo"); // 文字列に変換 string result = sb.ToString(); // 完成した文字列(resultの内容) // True10a0.10.2hoge999aaapiyo
stringと時間比較用サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication { class Program { static void Main(string[] args) { // 時間計測用(ストップウォッチ) System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); // 結果保持用文字列 string result = ""; // 時間計測開始 sw.Start(); // ------------ StringBuilderを利用 ------------ StringBuilder sb = new StringBuilder(1024); for (int i = 0; i < 1024; ++i) { sb.Append("a"); } // 文字列に変換 result = sb.ToString(); // 時間計測終了 sw.Stop(); // 結果を表示する Console.WriteLine(sw.Elapsed.TotalMilliseconds); result = ""; // 時間計測開始 sw.Start(); // ------------ stringを利用 ------------ for (int i = 0; i < 1024; ++i) { result += "a"; } // 時間計測終了 sw.Stop(); // 結果を表示する Console.WriteLine(sw.Elapsed.TotalMilliseconds); } } }
出力 0.0399 2.0726 CPU:Genuine Intel(R) U1400 @1.2GHz ※ショボイPCでごめんなさい。
余談ですがJavaではStringBufferというクラスです。 C#の前身である言語Delphiの同一機能がTStringBuilderというクラスなので影響を受けて いるのでしょうが、納得できません。 メジャーな言語にあわせて欲しいものです。
カテゴリ

リンク
C++11のコードを
試すのに便利です。
http://ideone.com/

同人ゲームを
製作している知人
sorcery

にほんブログ村 IT技術ブログ C/C++へ
にほんブログ村


C++ ブログランキングへ

ゲームダウンロード DefenceTri