C# 对GUI的写入应该保持在最低限度吗?

C# 对GUI的写入应该保持在最低限度吗?,c#,C#,我用一个文本框和两个按钮设置了一个windows窗体,下面是按钮的单击事件: private int numberOfIterations = 1000; private void WriteToGuiManyTimesButton_Click(object sender, EventArgs e) { TestTextBox.Text = string.Empty; DateTime startTime = DateTime.Now; for (int i = 0; i

我用一个文本框和两个按钮设置了一个windows窗体,下面是按钮的单击事件:

private int numberOfIterations = 1000;
private void WriteToGuiManyTimesButton_Click(object sender, EventArgs e)
{
    TestTextBox.Text = string.Empty;
    DateTime startTime = DateTime.Now;
    for (int i = 0; i < numberOfIterations; i++)
    {
        TestTextBox.Text += "s";
    }
    DateTime endTime = DateTime.Now;
    TestLabel.Text = (endTime.Ticks - startTime.Ticks).ToString();
}

private void WriteToGuiOnceButton_Click(object sender, EventArgs e)
{
    TestTextBox.Text = string.Empty;
    DateTime startTime = DateTime.Now;
    string s = "";
    for (int i = 0; i < numberOfIterations; i++)
    {
        s += "s";
    }
    TestTextBox.Text = s;
    DateTime endTime = DateTime.Now;
    TestLabel.Text = (endTime.Ticks - startTime.Ticks).ToString();
} 
private int numberOfIterations=1000;
私有void writeToGuimanyTimeButton_单击(对象发送方,事件参数e)
{
TestTextBox.Text=string.Empty;
DateTime startTime=DateTime.Now;
对于(int i=0;i
最终结果是一样的,文本框有1000个“s”

但是,如果在内存中准备字符串,然后将其写入文本框,只需要9985个刻度,但是如果每次写入文本框,则需要1222285个刻度


这是因为写入TextBox.Text要比写入内存中的变量花费更长的时间,如果是,原因是什么?

多次写入
TextBox.Text的原因是它是一个属性。该属性在每次编写时都执行代码,可能引发各种事件,如Dmitry建议的重新绘制


更改内存中的字符串只需创建一个添加了字符的新字符串,这似乎要快得多。正如Dmitry所建议的,使用StringBuilder将是最佳选择,因为这不会导致为每次修改创建新的字符串对象。

在每个循环中重新绘制
文本框需要花费大量时间;
但是,在
s+=“s”
中重新创建常量
字符串也不是一个好选择。
使用
StringBuilder
作为缓冲区:

private void WriteToGuiManyTimesButton_Click(object sender, EventArgs e) {
  DateTime startTime = DateTime.Now;

  StringBuilder Sb = new StringBuilder();

  for (int i = 0; i < numberOfIterations; ++i) {
    Sb.Append("s");
  }

  TestTextBox.Text = Sb.ToString();

  DateTime endTime = DateTime.Now;
  TestLabel.Text = (endTime.Ticks - startTime.Ticks).ToString();
}
private void WriteToGuiManyTimesButton\u单击(对象发送方,事件参数e){
DateTime startTime=DateTime.Now;
StringBuilder Sb=新的StringBuilder();
对于(int i=0;i
textbox的不断重新绘制最佳解决方案是使用StringBuilder for itterationsYes,但StringBuilder在这种情况下对我没有帮助,因为我的目标是找出写入GUI的速度慢的原因,而不是使用高效的代码。如果我使用StringBuilder,那么我必须在两个按钮单击事件中使用它,以保持变量受控。如何使用for循环和StringBuilder多次写入GUI?谢谢您的回答。然而,我已经知道在每个循环中重新绘制文本框需要很多时间。我想知道这是为什么,而不是StringBuilder更好。