将大量文本写入文本框

时间:2010-08-06 20:35:34

标签: c# winforms textbox

我正在将一个包含大量格式化文本的日志写入.net windows窗体应用程序中的文本框。

一旦数据超过几兆,它就会很慢。因为我追加字符串必须每次都重新分配吗?我只需要将值设置为文本框一次,但在我的代码中,我正在进行数千次line+=data

有更快的方法吗?也许一个不同的控制?我可以使用链接列表字符串类型吗?

3 个答案:

答案 0 :(得分:7)

如果文本框以递增方式添加,则StringBuilder将无法帮助,例如日志输出。

但是,如果上述情况属实,如果您的更新频繁,则可能需要缓存一些更新,然后将其追加到一步(而不是经常附加)。这将为您节省许多字符串重新分配...然后StringBuilder会有所帮助。

注意:

  1. 创建一个类范围的StringBuilder成员(_sb)
  2. 启动计时器(或使用计数器)
  3. 将文字更新附加到_sb
  4. 当计时器滴答或某个计数器达到重置并追加时 文本框
  5. 从#1重启过程

答案 1 :(得分:6)

还没有人提到虚拟化,这实际上是为大量数据提供可预测性能的唯一方法。一旦日志变得足够大,即使使用StringBuilder并将其每半秒转换为一个字符串,它也会非常慢。

使用数据虚拟化,您只需在内存中保存必要的数据(即用户可以看到的内容,或者可能在两侧稍微多一些),而其余数据将存储在磁盘上。当新数据进入以替换它时,旧数据将“推出”内存。

为了让TextBox 出现好像它里面有很多数据,你会告诉它确实如此。当用户滚动时,您将使用来自底层源的相关数据替换缓冲区中的数据(使用随机文件访问)。因此,您的UI将监视文件,而不是监听日志记录事件。

当然,这比简单地使用StringBuilder要多得多,但我认为值得一提,以防万一。

答案 2 :(得分:5)

使用StringBuilder构建字符串,然后使用toString()将其转换为字符串,并将其指定给文本框。