Wpf .net4中的静态内存泄漏-将内存BitmapImage绑定到映像源

Wpf .net4中的静态内存泄漏-将内存BitmapImage绑定到映像源,wpf,memory-leaks,bitmapimage,imagesource,Wpf,Memory Leaks,Bitmapimage,Imagesource,我知道过去这里也有人问过类似的问题,但他们都没有解决我的问题的办法: 我将图像从内存加载到位图图像中: private static BitmapImage LoadImage(byte[] imageData) { if (imageData == null || imageData.Length == 0) return null; var image = new BitmapImage(); using (var mem =

我知道过去这里也有人问过类似的问题,但他们都没有解决我的问题的办法:

我将图像从内存加载到位图图像中:

    private static BitmapImage LoadImage(byte[] imageData)
    {
        if (imageData == null || imageData.Length == 0) return null;
        var image = new BitmapImage();
        using (var mem = new MemoryStream(imageData))
        {
            mem.Position = 0;
            image.BeginInit();
            image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
            image.CacheOption = BitmapCacheOption.OnLoad;
            image.UriSource = null;
            image.StreamSource = mem;
            image.EndInit();
        }
        image.Freeze();
        return image;
    }
然后使用它(与INotifyPropertyChange一起)将生成的位图图像绑定到图像对象的源(在页面上)

问题是:这会泄漏内存(在我的例子中,2-3个图像上的内存高达300MB!)

您甚至没有使用探查器发现这一点-只有.net内存探查器让我走上了正轨(因为它在非托管内存中,所有字节都在那里-所以ANTS告诉我,.net使用分配给应用程序的总私有字节数为367,3MB的19,24MB”-很好):

不管我怎么做,我都不会让这个漏洞消失。 已尝试(一次全部尝试):

  • 清除可视树/卸载时删除图像
  • 将图像源设置为空
  • 在矩形中使用ImageBrush而不是图像
  • 不处理MemoryStream的其他缓存选项
  • 不要冻结图像
我不明白-真的! 一旦我停止使用源中的图像,一切都正常(无泄漏)

有人告诉我有什么选择吗

备注
看起来这根本不是bug(见我的第二条评论)-我必须检查一下,所以我现在就开始提问-也许这也能帮助解决其他问题

对不起,伙计们-这确实不是“bug”,而是由高分辨率图片引起的


如果我应该删除这个问题,或者我应该把它留在这里,因为其他人可能会遇到同样的情况,请对此发表评论…

hmm。。。不知道这是否真的是内存泄漏,因为“泄漏”似乎限制在550MB左右-在此之后,如果我再次加载位图,一些(200-300MB)内存将被释放-但这仍然不是一个令人满意的行为…嗯。。。哦,天哪,似乎这个问题是由愚蠢的图片使用引起的。这些图片是由用户提供的(一些类型的地图-黑色/白色和大量的白色),我只查看了文件大小(大约1MB)-但是那些是.JPG,图片的分辨率高达10000 X 5000像素(sic!)-所以将其解压为32位,很容易得到每张图片>150MB。。。所以我想我可以称之为“已解决”,但我现在就让它打开-也许有一些好的评论,我仍然需要尝试“解决方法”(=合理的图片)