将大量文本写入文本框

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

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

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

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

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

笔记:

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

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

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

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

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

StringBuilder一起构建String,然后使用toString()将其转换为String,并将其分配给文本框。