windows 形式的 C++ 多行文本框溢出

C++ multiline textbox overflow in windows form

我的程序中有一个日志文本框,它的内容随着程序运行s 的增长而越来越大。我没有时间自己测试,但我想知道文本框如何处理大量文本。它会 运行 内存不足还是会自动释放一些内存?如果它不是自动完成的,那么我自己处理这个问题的最佳方法是什么而不是不时地清除日志?

编辑:我正在使用 Visual Studio 2013 CLR 项目和 Windows 表单

我建议您为此使用日志数据的链接列表。 例如:

struct LogData{
 int time;
 Int catagory;
 char * string;
}
struct LogNode {
LogData data;
LogNode* nextLog;
}

您使用 NULL 初始化了 nextLog,当您有另一件事要记录时,您创建了一个新的 LogNode 并使用您的 LogData 和 NULL 初始化了它。当您不知道真正需要多少数据时,建议使用堆分配。通过保存指向第一个 logNode 的指针,您可以访问所有日志节点。

文本框在需要时重新分配内存。因为它在堆上,所以文本框不需要知道它将使用多少内存,正如名称动态分配所暗示的那样,它可以动态分配内存。

texbox 只会接受越来越多的文本,直到用完可用内存。为了缓解这种情况,您可以在代码中设置一个上限,以限制您选择显示的 characters/lines 数量。达到上限后,请先删除旧数据,然后再添加新数据。

否则,如果您需要显示所有可能的文本,同时尽量减少内存使用,请考虑重新考虑您的 UI 策略。

例如,我有一个应用程序可以显示大小可能高达数 GB 的日志文件。我使用虚拟 ListView 来显示文本,我将 visible 文本保存在内存中,并动态地(取消)加载 non-visual 文本当用户滚动 ListView 时。这样最多可以将内存使用量降低到几 MB,同时仍然提供对整个日志的访问。

您可以考虑做类似的事情。使用文件或数据库存储用户不会立即看到的日志数据,并在用户需要查看时按需加载该数据。