CListCtrl 项目计数限制和内存(RAM)使用

CListCtrl item count limitation and memory(RAM) usage

问题:

我编写了一个程序,其中包含 10~12 个 CListCtrl,同时向其追加行。

我从来没有删除旧项目来限制 listCtrls 的行数,并且该程序有 运行 大约 1 天。
刚刚看了进程监控,发现内存占用增加到600MB(原来是70~80MB左右)

我认为原因与CListCtrls有关。

问题:

我想将内存使用量减少到 100MB 左右。

所以,我想知道:

1. CListCtrl的行数有没有默认限制,有多少?

2。内存使用量会随着我删除top item而减少吗?

3。如果 CListCtrl 没有 realse 在 UI 上删除的缓冲区,限制内存使用的解决方案是什么?

如有任何答案或参考,我们将不胜感激。

就像计算中的任何事情一样,不涉及猜测。阿list-view control也不例外。没有默认限制,控件将尽职尽责地存储您输入的所有数据,直到耗尽系统资源。它不会尝试猜测您可能认为哪些数据重要或可丢弃。

如果您需要限制列表视图控件消耗的资源量,那就由您来做。您将不得不手动删除您知道不再相关的项目。响应删除项目释放了多少内存(或者如果有的话)是一个实现细节。你无法控制这个。

如果您需要这种控件,则必须解除列表视图控件代表您管理内存的任务。值得庆幸的是,该控件为您提供了 LVS_OWNERDATA 功能,使您可以独立于控件管理后备内存,并且只告诉控件有多少项。

这通常称为 virtual list-view, and you will find countless examples of how to implement one, such as How to Use Virtual List-View Controls

LVS_EX_DOUBLEBUFFER 扩展列表视图样式与这些无关。它仅适用于渲染,并在系统资源方面增加了一次性常量开销。

I wrote a program that has 10~12 CListCtrls which rows are appending to simultaneously.

一个具有 10-12 列的 CListCtrl 可能更适合这种情况。

...memory usage increased to 600MB

你为什么称它为 problem?这只是一个观察。您是否将项目添加到这些控件中?多少?以什么速度?

您打算如何处理包含数千个项目的列表控件?滚动希望看到有趣的东西?

重点是 - 您可能会发现更好的数据可视化效果。

  1. Is there default limitation of CListCtrl's row count, and how much is it?

控件使用 int 作为项目编号,因此约为 20 亿。或者,作为 IInspectable 规定 - 当您 运行 资源不足时;以先到者为准。

  1. Will the memory usage be reduced as much as I delete top items?

当您释放保存数据的内存时,内存使用量会减少。如果您将字符串添加到您的列表中(而不是指向其他地方保存的数据的指针)——那么是的,删除项目将释放内存。