这两种方法有什么区别?
一个比另一个更有效率吗?
我在想appendText()可能使用了一个类似于StringBuilder的方法,即它使用自己的缓存,而不是每次都创建和追加一个新字符串,是真的吗?
谢谢。
最佳答案
正如Remarks section of MSDN Documentation中明确提到的那样。
appendText方法允许用户在不使用文本连接的情况下将文本追加到文本控件的内容中,这在需要许多连接时可以获得更好的性能。
你的问题,
这两种方法有什么区别?
我们都知道TextBox.Text += something;
如何工作,即每次都创建并附加一个新字符串,但是AppendText
如何工作,我找不到任何代码片段,无论它在内部使用StringBuilder
还是其他什么。
一个比另一个更有效率吗?
我认为以上问题的答案将取决于情况(基于测试用例观察)
如果Multiline
属性设置为false
,则连接(+=)会产生更好的结果,但另一方面Multiline
属性设置为True
,则AppendText
会产生更好的性能。
在阅读comment from Rawling后编辑我制作了一个自定义win-form解决方案,其中我有一个简单的textbox
在其中使用一个简单的hello
附加了一个简单的字符串for-loop
10000次。
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();
}
产量非常惊人,
测试1:多行属性为true
我不得不将迭代次数减少到一半,即5000次文本连接,因为它讲了很长时间。
btnAppendText_Click
在10000次迭代中,txtTime
的输出几乎为3-4秒37222129
仅5000次迭代的btnConcante_Click
输出大于25分钟从上面的结果可以很清楚地看出,
txtTime
比14449906487
更快更有效(当AppendText
是Multiline
时)。测试2:多行属性为false
True
在10000次迭代中,Concatenation
的输出几乎为3-4秒btnConcante_Click
在10000次迭代中,txtTime
的输出几乎为2-3分钟从上面的结果可以很清楚地看出,级联是快速有效的(当
39862280
是btnAppendText_Click
时),然后txtTime