LoginSignup
2
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-05

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

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

1回目
スクリーンショット 2016-07-13 14.12.24.png

2回目
スクリーンショット 2016-07-13 14.13.13.png

3回目
スクリーンショット 2016-07-13 14.14.02.png

最適化後の抜粋

        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();
        }
2
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4