準備
(なし)
デザイン
- フォーム (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)
