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