代码之家  ›  专栏  ›  技术社区  ›  Byron Whitlock

将大量文本写入文本框

  •  10
  • Byron Whitlock  · 技术社区  · 15 年前

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

    一旦数据超过几兆欧,速度就慢了。因为我在追加字符串,所以每次都要重新分配,对吗?我只需要设置文本框的值一次,但在我的代码中我正在做 line+=data 数万次。

    有没有更快的方法?也许是另一种控制?有我可以使用的链表字符串类型吗?

    3 回复  |  直到 12 年前
        1
  •  7
  •   Paul Sasik    15 年前

    如果文本框以增量方式添加到,比如日志输出,StringBuilder将不会有帮助。

    隐藏物

    笔记:

    1. 创建类范围的StringBuilder成员(\u sb)
    2. 启动计时器(或使用计数器)
    3. 将文本更新附加到\u sb
    4. 文本框
        2
  •  6
  •   Tim Cooper    13 年前

    还没有人提到虚拟化,虚拟化实际上是为大量数据提供可预测性能的唯一方法。即使使用 StringBuilder 每半秒钟把它转换成一个字符串 非常 一旦原木足够大,就放慢速度。

    使用数据虚拟化,您将只在内存中保存所需的数据(即用户可以看到的内容,或者在两侧多保存一点),而其余的数据将存储在磁盘上。旧数据会随着新数据的到来而“滚出”内存。

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

    当然,这比简单地使用 字符串拼接 但我觉得值得一提以防万一。

        3
  •  5
  •   Frank    15 年前

    用一根绳子把你的绳子搭起来 StringBuilder ,然后使用 toString()