我制作了一个应用程序(类似于 Google 地图)并添加了一个文本框字段,其中写入了调试数据(当然我打算在之后将其删除)。有趣的事实是,在它“满”之后,假设是几千字节 - 整个程序显着减慢并且需要退出,因为无法使用它。
你能解释一下吗?
我制作了一个应用程序(类似于 Google 地图)并添加了一个文本框字段,其中写入了调试数据(当然我打算在之后将其删除)。有趣的事实是,在它“满”之后,假设是几千字节 - 整个程序显着减慢并且需要退出,因为无法使用它。
你能解释一下吗?
嗯,它肯定超过几千字节。但是,是的,TextBox 非常不适合作为显示跟踪信息的控件。每次添加新行时,它都必须重新分配其内部缓冲区,将旧文本与新文本合并。这与 .NET 的 String 类完全相同。使用 StringBuilder 类作为解决方法,但 TextBox 不存在等效项。
添加大量行时使 TextBox 变得非常慢的另一个选项是 WordWrap 属性。将其设置为 True 需要它在每次绘制自己时做大量工作来计算每条线的长度。
因此,解决方法是将 WordWrap 设置为 False,并通过在长度达到限制时丢弃一半文本来防止文本数量无限增长。或者通过使用不同的控件,TextBox 无论如何都不是很合适,因为编辑跟踪数据没有意义。像列表框。
而不是一次附加一点数据,例如:
debugTextBox.Text += "Some new debug info"
也许这个策略可能更快:
StringBuilder debugText = new StringBuilder();
...
debugText.Append("Some new debug info");
debugTextBox.Text = debugText.ToString();
(虽然StringBuilder
这可能是矫枉过正,并且可能证明比直接使用字符串连接对 a 慢string debugText
)