为什么文本框溢出会显著降低程序运行速度

本文关键字:程序 运行 速度 文本 溢出 为什么 | 更新日期: 2023-09-27 18:00:55

我制作了一个应用程序(类似于谷歌地图(,并添加了一个文本框字段,其中写入了调试数据(当然我打算在之后删除它(。有趣的事实是,在它"满了"之后,比如说几KB,整个程序明显减慢了速度,需要退出,因为无法使用它

你能解释一下吗?

为什么文本框溢出会显著降低程序运行速度

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

另一个选项是WordWrap属性,当您添加大量行时,它会使TextBox非常慢。将其设置为True需要它在每次绘制时做大量工作来计算每条线的长度。

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

而不是一次附加一点数据,例如:

debugTextBox.Text += "Some new debug info"

也许这个战略可能更快:

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

(尽管StringBuilder对此可能有些过头了,而且可能比直接使用针对string debugText的字符串级联更慢(