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,同时仍然提供对整个日志的访问。
您可以考虑做类似的事情。使用文件或数据库存储用户不会立即看到的日志数据,并在用户需要查看时按需加载该数据。
我的程序中有一个日志文本框,它的内容随着程序运行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,同时仍然提供对整个日志的访问。
您可以考虑做类似的事情。使用文件或数据库存储用户不会立即看到的日志数据,并在用户需要查看时按需加载该数据。