Bac*_*ave 7 c# stringbuilder winforms
这两种方法有什么区别?
一个比另一个更有效吗?
我想也许AppendText()使用类似于StringBuilder的方法,即它使用自己的缓存而不是每次创建和追加一个新字符串,是真的吗?
谢谢.
dbw*_*dbw 13
正如MSDN文档的备注部分中明确提到的那样
AppendText方法使用户能够在不使用文本连接的情况下将文本附加到文本控件的内容,这可以在需要多个连接时产生更好的性能.
你的问题,
这两种方法有什么区别?
我们都知道如何TextBox.Text += something;工作,即每次创建和附加一个新字符串,但是如何AppendText工作我无法找到任何代码片段,无论是内部使用StringBuilder还是其他内容.
一个比另一个更有效吗?
我认为对上述问题的回答将取决于具体情况,(基于测试用例观察)
如果
Multiline属性设置为,false则Concatenation(+ =)会产生更好的结果,但另一方面,Multiline属性设置为True则会AppendText产生更好的性能.
编辑阅读了Rawling的评论后,我制作了一个自定义的win-form解决方案,其中我有一个简单textbox的例子,其中我使用简单的方法将一个简单的字符串附加hello 10000次for-loop
private void btnAppendText_Click(object sender, EventArgs e)
{
txtText.Text = string.Empty;
DateTime startTime = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
txtText.AppendText(s);
}
DateTime endTime = DateTime.Now;
txtTime.Text = (endTime.Ticks - startTime.Ticks).ToString();
}
private void btnConcante_Click(object sender, EventArgs e)
{
txtText.Text = string.Empty;
DateTime startTime = DateTime.Now;
for (int i = 0; i < 5000; i++)
{
txtText.Text += s;
}
DateTime endTime = DateTime.Now;
txtTime.Text = (endTime.Ticks - startTime.Ticks).ToString();
}
Run Code Online (Sandbox Code Playgroud)
输出非常令人惊讶,
测试1:多行属性是真的
我必须将迭代减少到一半,即文本连接的5000,因为它说的很长时间
btnAppendText_Click上输出txtTime为3722212910000次迭代几乎3-4秒
btnConcante_Click输出txtTime是14449906487然后25分钟,仅5000迭代
从上面的结果可以清楚地看出,AppendText它更快更有效(当时Multiline是True)Concatenation
测试2:多行属性是错误的
btnConcante_Click上输出txtTime是39862280几乎3-4秒10000迭代
btnAppendText_Click输出上txtTime是1043279672几乎2-3分钟10000次迭代
从上面的结果可以清楚地看出,Concatenation是更快更有效的(当时Multiline是false)AppendText
| 归档时间: |
|
| 查看次数: |
15375 次 |
| 最近记录: |