为什么文本框溢出会使程序变得如此显着?

时间:2013-02-24 13:05:41

标签: c# winforms textbox garbage-collection overflow

我创建了一个应用程序(类似谷歌地图),我添加了一个文本框字段,其中写入了调试数据(当然我打算在之后将其删除)。有趣的事实是,在它“满”之后,让我们说几千字节 - 整个程序显着放慢,需要退出,因为一个人无法使用它。

你可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

嗯,肯定超过几千字节。但是,TextBox非常不适合作为显示跟踪信息的控件。每次添加新行时,都必须重新分配其内部缓冲区,将旧文本与新文本合并。这是.NET的String类的完全同类问题。使用StringBuilder类作为解决方法,但TextBox没有等效项。

添加大量行时使TextBox非常慢的另一个选项是WordWrap属性。将它设置为True需要它做很多工作,以便在每次绘制时自己计算出每条线的长度。

因此,解决方法是将WordWrap设置为False并防止文本数量随着长度达到限制而将其中的一半丢弃而无限增长。或者通过使用不同的控件,TextBox不太适合,因为编辑跟踪数据没有意义。像ListBox一样。

答案 1 :(得分:0)

不是一次附加少量数据,例如:

debugTextBox.Text += "Some new debug info"

也许这个充满活力的可能更快:

StringBuilder debugText = new StringBuilder();
...
debugText.Append("Some new debug info");
debugTextBox.Text = debugText.ToString();

(虽然StringBuilder对此可能有点过分,并且可能证明比直接使用字符串连接string debugText更慢