我正在将一个包含大量格式化文本的日志写入.net windows窗体应用程序中的文本框。
一旦数据超过几兆,它就会很慢。因为我追加字符串必须每次都重新分配吗?我只需要将值设置为文本框一次,但在我的代码中,我正在进行数千次line+=data
。
有更快的方法吗?也许一个不同的控制?我可以使用链接列表字符串类型吗?
答案 0 :(得分:7)
如果文本框以递增方式添加,则StringBuilder将无法帮助,例如日志输出。
但是,如果上述情况属实,如果您的更新频繁,则可能需要缓存一些更新,然后将其追加到一步(而不是经常附加)。这将为您节省许多字符串重新分配...然后StringBuilder会有所帮助。
注意:
答案 1 :(得分:6)
还没有人提到虚拟化,这实际上是为大量数据提供可预测性能的唯一方法。一旦日志变得足够大,即使使用StringBuilder
并将其每半秒转换为一个字符串,它也会非常慢。
使用数据虚拟化,您只需在内存中保存必要的数据(即用户可以看到的内容,或者可能在两侧稍微多一些),而其余数据将存储在磁盘上。当新数据进入以替换它时,旧数据将“推出”内存。
为了让TextBox
出现好像它里面有很多数据,你会告诉它确实如此。当用户滚动时,您将使用来自底层源的相关数据替换缓冲区中的数据(使用随机文件访问)。因此,您的UI将监视文件,而不是监听日志记录事件。
当然,这比简单地使用StringBuilder
要多得多,但我认为值得一提,以防万一。
答案 2 :(得分:5)
使用StringBuilder
构建字符串,然后使用toString()
将其转换为字符串,并将其指定给文本框。