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)

Follow me!