TextBox.Text + =“string”; vs TextBox.AppendText(“string”);
这两种方法有什么区别?
一个比另一个更有效吗?
我想也许AppendText()使用类似于StringBuilder的方法,即它使用自己的缓存而不是每次都创建和追加一个新的字符串,这是真的吗?
谢谢。
正如MSDN文档的备注部分中明确提到的那样
AppendText方法使用户能够在不使用文本连接的情况下将文本附加到文本控件的内容,这可以在需要多个连接时产生更好的性能。
你的问题,
这两种方法有什么区别?
我们都知道TextBox.Text += something;
将工作,即每次创建和附加一个新的字符串,但AppendText
如何工作我找不到任何代码片段,无论是内部使用StringBuilder
还是其他东西。
一个比另一个更有效吗?
我认为对上述问题的回答将取决于具体情况, (基于测试用例观察)
如果
Multiline
属性设置为false
则Concatenation(+ =)会产生更好的结果,但另一方面Multiline
属性设置为True
然后AppendText
产生更好的性能。
编辑在阅读罗林的评论后,我制作了一个自定义的win-form解决方案,其中我有一个简单的textbox
,其中我使用简单的for-loop
在其中附加了一个简单的字符串hello
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:多行属性是真的我必须将迭代减少到一半,即文本连接的5000,因为它说的很长时间
对于10000次迭代,
btnAppendText_Click
上的btnAppendText_Click
输出为37222129
几乎3-4秒
btnConcante_Click
上的btnConcante_Click
输出为14449906487
超过25分钟,仅进行5000次迭代
从上面的结果可以清楚地看出, AppendText
更快更有效(当Multiline
为True
)然后Concatenation
测试2:多行属性是错误的
对于10000次迭代,
btnConcante_Click
上的btnConcante_Click
输出为39862280
几乎3-4秒
对于10000次迭代,btnAppendText_Click
上的btnAppendText_Click
输出为1043279672
差不多2-3分钟
从上面的结果可以清楚地看出,Concatenation更快更有效(当Multiline
为false
),然后是AppendText
AppendText与StringBuilder无关。 Text方法实际上看起来更简单(可能性能更高)。 请参阅这两种方法的源代码以供参考:
public void AppendText(string text) { if (text.Length > 0) { int start; int length; this.GetSelectionStartAndLength(out start, out length); try { int endPosition = this.GetEndPosition(); this.SelectInternal(endPosition, endPosition, endPosition); this.SelectedText = text; } finally { if (base.Width == 0 || base.Height == 0) { this.Select(start, length); } } } } public override string Text { get { return base.Text; } set { if (value != base.Text) { base.Text = value; if (base.IsHandleCreated) { base.SendMessage(185, 0, 0); } } } }
作为dbw
的补充(如果有人能找到我犯了错误的地方),这是我的性能测试:
private void Form1_Click(object sender, EventArgs e) { Stopwatch sw = new Stopwatch(); sw.Reset(); textBox1.Text = ""; sw.Start(); for (int i = 0; i < 10000; i++) { textBox1.Text += s; } sw.Stop(); var e1 = sw.Elapsed; sw.Reset(); textBox1.Text = ""; sw.Start(); for (int i = 0; i < 10000; i++) { textBox1.AppendText(s); } sw.Stop(); var e2 = sw.Elapsed; }
我看到e1
约3秒钟, e2
约2分钟。
上述就是C#学习教程:TextBox.Text + =“string”; vs TextBox.AppendText(“string”);分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/986846.html