这两种方法有什么区别?
一个比另一个更有效率吗?
我在想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-loop10000次。

    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分钟
从上面的结果可以很清楚地看出,txtTime14449906487更快更有效(当AppendTextMultiline时)。
测试2:多行属性为false
True在10000次迭代中,Concatenation的输出几乎为3-4秒
btnConcante_Click在10000次迭代中,txtTime的输出几乎为2-3分钟
从上面的结果可以很清楚地看出,级联是快速有效的(当39862280btnAppendText_Click时),然后txtTime

08-18 11:09