如何使用Clistctrl优化内存

时间:2013-08-08 09:51:50

标签: visual-c++

我正在使用带有图标视图的虚拟列表视图来显示硬盘中文件夹中的许多图像。所有图像都存储在CImageList中。可以使用滚动条在UI中缩放图像大小。为了提高性能,在NM_CUSTOMDRAW通知到来时完成每个项目的绘制。

问题是当有很多图像时,应用程序占用的内存太多了。并且图像缩放不顺畅。有没有办法减少内存使用量,比如在内存中只保留正在查看的图像。

2 个答案:

答案 0 :(得分:0)

解决方法是为列表视图启用虚拟模式。在此模式下,列表视图控件本身不承载任何数据;它只知道它有多少行。所有数据均按需提供。这使得您(应用程序)负责管理它显示的数据,但它也允许您一次只在内存中保留一部分数据项。

CListCtrl上{{1}}的设置说明是here on MSDN

答案 1 :(得分:0)

我发现使用CreateBitmap()创建HBitmap解决了我的内存问题。

最初我使用CreateDIBitmap()函数来创建HBitmap。这存储了太多数据。 后来我使用CreateBitmap()在内存中创建我的位图。这也将数据存储在内存中,但它可以忽略不计。