TextBox.Text + ="string"; vs TextBox.AppendText("string");

Bac*_*ave 7 c# stringbuilder winforms

这两种方法有什么区别?

一个比另一个更有效吗?

我想也许AppendText()使用类似于StringBuilder的方法,即它使用自己的缓存而不是每次创建和追加一个新字符串,是真的吗?

谢谢.

dbw*_*dbw 13

正如MSDN文档的备注部分中明确提到的那样

AppendText方法使用户能够在不使用文本连接的情况下将文本附加到文本控件的内容,这可以在需要多个连接时产生更好的性能.

你的问题,

这两种方法有什么区别?

我们都知道如何TextBox.Text += something;工作,即每次创建和附加一个新字符串,但是如何AppendText工作我无法找到任何代码片段,无论是内部使用StringBuilder还是其他内容.

一个比另一个更有效吗?

我认为对上述问题的回答将取决于具体情况,(基于测试用例观察)

如果Multiline属性设置为,falseConcatenation(+ =)会产生更好的结果,但另一方面,Multiline属性设置为True则会AppendText产生更好的性能.

编辑阅读了Rawling评论后,我制作了一个自定义的win-form解决方案,其中我有一个简单textbox的例子,其中我使用简单的方法将一个简单的字符串附加hello 10000for-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上输出txtTime3722212910000次迭代几乎3-4秒
btnConcante_Click输出txtTime14449906487然后25分钟,仅5000迭代

从上面的结果可以清楚地看出,AppendText它更快更有效(当时MultilineTrue)Concatenation

测试2:多行属性是错误的

btnConcante_Click上输出txtTime39862280几乎3-4秒10000迭代
btnAppendText_Click输出上txtTime1043279672几乎2-3分钟10000次迭代

从上面的结果可以清楚地看出,Concatenation是更快更有效的(当时Multilinefalse)AppendText

  • @dbw 我试图尽可能地复制你的测试(切换到 .NET 4 客户端配置文件,切换到使用类变量而不是字符串文字,添加 5 个字符而不是一个,循环 10k 而不是 1k 次)和我的 `+=` 循环仍然在 3 秒内完成,而我的 `AppendText` 运行了大约 2 分钟。我想 MSDN 文档并不完全是垃圾 - 说它*可以*产生更好的性能是正确的,因为你已经见证了它!- 但我很想知道为什么我们会看到如此相反的结果。与所有性能问题一样,由 OP 来描述他的实际使用情况! (2认同)