图像资源内存不足

时间:2013-04-12 14:13:49

标签: c# image memory resources resourcemanager

我们注意到Visual Studio c#中的图像资源有一种奇怪的行为。

如果您将图像添加到项目资源并多次加载图像,很快就会出现内存不足的情况。

它只发生在某些系统上(我测试过的每一台PC)。

重现:

  1. 创建Windows窗体项目
  2. 将图像添加到项目资源(32x32 PNG)
  3. 创建一个包含2000循环的for循环
  4. 循环中的
  5. 将图像从资源填充到私有列表

    private List<image> _images = new List<image>();
    private void ButtonClick(object sender, EventArgs e)
    {
        for (int i = 0; i < 2000; i++)
        {
            _images.Add(Properties.Resources.myImage);
        }
    }
    
  6. 每次运行循环时都会分配一些内存。 在健康的系统上,您可以执行此操作,直到达到2GB(32位应用程序)。

    但在生病的系统上。该应用程序已经挂起200MB。

    非常值得注意的是,sik系统不像健康系统那样分配相同的内存。 sik系统仅在循环的单个执行中分配大约一半的内存。 sik系统每个循环分配50MB。一个健康系统分配120MB。

    系统完全相同。 Core I7,Windows7,12GB RAM,Visual Studio 2012。 在Windows8上,每个测试系统都会出现内存泄漏。

    有没有人注意到同样的奇怪行为?

1 个答案:

答案 0 :(得分:0)

我们发现了一些有趣的东西。

问题与Internet Explorer 10有关。 这也解释了为什么每个Windows8都出现泄漏

卸载IE10没有帮助。 如果您卸载Windows Update KB2670838,则会有所帮助。

顺便说一下...... 此代码具有相同的问题。

Image.FromFile("myImage.png");

所以问题是在GDI +中而不是在ResourceManager中。