C# 文字列結合 (+ 演算子・StringBuilder) の効率を考える
準備
(なし)
デザイン
1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にボタン (button2) を配置します。
3. フォーム (Form1) にリストボックス (listBox1) を配置します。
サンプルコード (C#)
// 名前空間の追加
(なし)
// コード
private void button1_Click(object sender, EventArgs e)
{
var dt1 = DateTime.Now;
string s = "";
foreach (var idx in Enumerable.Range(1, 200000))
{
s += "A";
}
var dt2 = DateTime.Now;
listBox1.Items.Add("+演算子");
listBox1.Items.Add(s.Length);
listBox1.Items.Add(dt2 - dt1);
}
private void button2_Click(object sender, EventArgs e)
{
var dt1 = DateTime.Now;
var s = new StringBuilder();
foreach (var idx in Enumerable.Range(1, 200000))
{
s.Append("A");
}
var dt2 = DateTime.Now;
listBox1.Items.Add("StringBuilder");
listBox1.Items.Add(s.Length);
listBox1.Items.Add(dt2 - dt1);
}
解説
文字列を結合する際、+ 演算子による結合はコーディング上は効率が良いのですが、処理効率としては非常に悪いようです。StringBuilder は時間計測ができなぐらい遅いようです。試しにループ回数を増やしてみたのですが、+ 演算子は極端にスピードが落ち、計測しませんでした。
結果
動作確認環境
Visual Studio 2019 Professional (C# 8.0)