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