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



问题:

我写了一个程序,它有10到12个CListCtrls,行同时附加到这些行。

我从未删除过旧项目来限制listCtrls的行数,该程序已经运行了大约1天
我刚刚看到进程监视器,意识到内存使用量增加到600MB(最初大约是70~80MB)

我认为原因与CListCtrls有关。

问题:

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

所以,我想知道:

1.CListCtrl的行数是否有默认限制,多少

  • 我听说CListCtrl有一个限制,所以不需要手动删除我的一个队友的热门项目

2.内存使用量会像删除前几项一样减少吗

  • 我想知道CListCtrl保存的缓冲区数据与我们在UI上看到的相同,或者它只会像std::vector中那样增加缓冲区大小

3.如果CListCtrl不重新分配UI上删除的缓冲区,那么限制内存使用的解决方案是什么

  • 或者问题的原因与CListCtrl无关
    我将LVS_EX_DOUBLEBUFFER与CListCtrls一起使用。

  • 另一方面,我使用了10-12个文件映射进行日志记录,每个映射大约6MB。这些已经测试了很多时间,我相信没有内存泄漏。

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

就像计算中的任何东西一样,不需要猜测。列表视图控件也不例外。没有默认限制,控件将尽职尽责地存储您向它抛出的所有数据,直到它耗尽系统资源。它不会试图猜测哪些数据可能是重要的或可丢弃的。

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

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

这通常被称为虚拟列表视图,您会发现如何实现它的无数示例,例如如何使用虚拟列表视图控件。

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

我写了一个程序,它有10到12个CListCtrls,行同时附加到这些行。

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

。。。内存使用量增加到600MB

为什么称之为problem?这只是一个观察。是否向这些控件添加项目?有多少速度是多少?

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

关键是,您可能会发现数据的可视化效果更好。

  1. CListCtrl的行数有默认限制吗?它有多少

控件使用int作为项目编号,因此约为20亿。或者,作为IInspectable声明-当你耗尽资源时;以先到者为准。

  1. 是否会像删除顶部项目一样减少内存使用量

释放保存数据的内存时,内存使用率将降低。如果你在列表中添加字符串(而不是指向其他地方保存的数据的指针),那么是的,删除项目将释放内存。

最新更新