C# 大量の文字列連結にはStringBuilderだよねってサンプル


最適化の指摘をいただいたので、進捗を除外・StringBuilderのキャパシティを設定にて
再度実行結果を観測しました。
結果にばらつきがあるため、3回分の結果を掲載しておきます。

ソースコード(修正済み)は こちら
SDK : Visual Studio Community 2015 Update 3

1回目

2回目

3回目

最適化後の抜粋

        private void btnExec_Click(object sender, EventArgs e)
        {
            NormalLoop();
            StringBuilderLoop();
            PachimonStringBuilderLoop();
            MessageBox.Show("Done.");
        }

        private void NormalLoop()
        {
            string lines = "";
            DateTime timer = DateTime.Now;
            long loopMax = (long)loopLimit.Value;

            for (long i = 0; i < loopMax; i++)
            {
                lines += string.Format("{0},data{1},{2}{3}", i, i, DateTime.Now, System.Environment.NewLine);
            }
            txtNormal.Text = ((Double)(DateTime.Now.Ticks - timer.Ticks) / 10000000.0).ToString();
        }

        private void StringBuilderLoop()
        {
            StringBuilder lines = new StringBuilder(32 * (int)loopLimit.Value);
            DateTime timer = DateTime.Now;
            long loopMax = (long)loopLimit.Value;

            for (long i = 0; i < loopMax; i++)
            {
                lines.Append(i).Append(",").Append("data").Append(i).Append(",").Append(DateTime.Now);
            }
            txtStringBuilder.Text = ((Double)(DateTime.Now.Ticks - timer.Ticks) / 10000000.0).ToString();
        }

        private void PachimonStringBuilderLoop()
        {
            StringBuilder lines = new StringBuilder(32 * (int)loopLimit.Value);
            DateTime timer = DateTime.Now;
            long loopMax = (long)loopLimit.Value;

            for (long i = 0; i < loopMax; i++)
            {
              lines.Append(string.Format("{0},data{1},{2}{3}", i, i, DateTime.Now, System.Environment.NewLine));
            }
            txtPachimon.Text = ((Double)(DateTime.Now.Ticks - timer.Ticks) / 10000000.0).ToString();
        }