C# 大量の文字列連結にはStringBuilderだよねってサンプル
2759 ワード
最適化の指摘をいただいたので、進捗を除外・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();
}
Author And Source
この問題について(C# 大量の文字列連結にはStringBuilderだよねってサンプル), 我々は、より多くの情報をここで見つけました https://qiita.com/Syn256/items/d3b36680c6777a3e5e09著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .