最適化の指摘をいただいたので、進捗を除外・StringBuilderのキャパシティを設定にて
再度実行結果を観測しました。
結果にばらつきがあるため、3回分の結果を掲載しておきます。
ソースコード(修正済み)は こちら
SDK : Visual Studio Community 2015 Update 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();
}