首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET ImageList实施中的ImageList容量错误?

.NET ImageList实施中的ImageList容量错误?
EN

Stack Overflow用户
提问于 2012-04-17 04:10:27
回答 2查看 1.7K关注 0票数 4

在.net应用程序中为我的ListView使用ImageList时遇到了一些问题。在我的实现中,根据使用情况,这个ImageList可以保存几千张图像。这个问题最初是在我尝试处理大量图像时出现的。一旦我通过5K+图像,我就遇到了一个通用的“图像不能被添加到ImageList”异常,试图添加一个图像。发生此故障的确切数字跳跃了一点。

因此,为了解决这个问题,我尝试使用本机ImageList_SetImageCount函数来扩展ImageList的容量。这很好,解决了我眼前的问题。我必须使用ImageListindex =图像而不是.Add()方法来填充列表。这一切都很好,但当需要提取图像时,问题就悄悄出现了。现在,每当我通过索引引用ImageList中的图像时,我都会得到一个内存不足异常。位图x= ImageListany索引将崩溃。

我已经尝试了许多不同的方法,但仍然遇到ImageList的问题。

在我进一步探索这个问题的最后一次尝试中,我把下面的一段测试代码放在一起,它仍然表现得很奇怪!

代码语言:javascript
复制
    private void Form1_Load(object sender, EventArgs e)
    {
        list = new ImageList();
        list.ImageSize = new Size(128, 128);
        list.ColorDepth = ColorDepth.Depth32Bit;
        Image[] images = new Image[10];
        for (int y = 0; y < 10; y++)
        {
            images[y] = new Bitmap(@"Path to loading_photo.png");
        }
        for (int x = 0; x < 750; x++)
        {
            list.Images.AddRange(images);
        }

        list.Images[12] = new Bitmap(@"Path to another.png");

最后一行崩溃,并显示"Image cannot be added to the ImageList“错误。奇怪的是,将第二个循环设置为较低的迭代(例如,对于总共添加的2000张图像,设置为200 ),它的行为刚刚好。

在.net中有没有某个我不知道的ImageList阈值?任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2012-04-17 08:30:06

我不能得到任何再现与张贴的代码。但是,重要的是要认识到,ImageList制作了位图的副本。因此,您应该在添加位图之后调用它的Dispose()方法。如果不这样做,那么您将面临严重的风险,即耗尽非托管内存,被位图数据消耗,并且当垃圾收集器运行的频率不足以清理您之后的内存时,这将是致命的。这不适用于代码段,因为只有10个位图。

票数 3
EN

Stack Overflow用户

发布于 2012-04-17 04:46:35

当你使用Reflector查看最后一行代码的功能时,你会发现ImageList的设置器在这一行实际上失败了:

代码语言:javascript
复制
bool flag2 = SafeNativeMethods.ImageList_Replace(new HandleRef(this.owner, this.owner.Handle), index, new HandleRef(null, handle), new HandleRef(null, monochromeMask));

它涉及到处理句柄,这些句柄在Windows中是有限的(如果我没记错的话,每个进程10000个)。因此,尽管您有大量的空闲内存,但您可能已经达到了句柄的限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10180954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档