準備
(なし)
デザイン
- フォーム (Form1) にボタン (button1) を配置します。
- フォーム (Form1) にボタン (button2) を配置します。
- フォーム (Form1) にリストボックス (listBox1) を配置します。
サンプルコード (C#)
using System.Text; namespace WinFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } 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 2022 Professional (.NET 7 C#11)
ログ
初版:2020.01.10 Visual Studio 2015 Professional (C# 6.0)