WPF BitmapImage内存使用率

| 我正在尝试将图像的字节数组转换为BitmapImage以绑定到按钮。
public static BitmapImage GetBitmapImageFromByteArray(byte[] p_Image)
    {
        try
        {
            BitmapImage bmpImage;
            if (p_Image != null)
            {
                using (MemoryStream msStream = new MemoryStream(p_Image))
                {
                    msStream.Position = 0;
                    bmpImage = GetBitmapImageFromStream(msStream);
                    //msStream.Close();
                    return bmpImage;
                }
            }
        }
        catch
        {
        }
        return null;
    }
GetBitmapImageFromStream看起来像这样:
public static BitmapImage GetBitmapImageFromStream(MemoryStream msImage)
    {
        try
        {
            if (msImage == null) return null;
                BitmapImage bmpImg = new BitmapImage();
                msImage.Position = 0;
                bmpImg.BeginInit();
                bmpImg.CacheOption = BitmapCacheOption.OnLoad;
                bmpImg.StreamSource = msImage;
                bmpImg.EndInit();
                return bmpImg;

        }
        catch
        {
            return null;
        }
    }
在bmpImg.EndInit()上,内存出现此峰值。而且我的界面上有很多按钮,这会引起问题。为什么会发生这种情况,我该如何解决或如何恢复内存? 谢谢。     
已邀请:
从帮助中,我猜想它会创建一个副本来缓存它,也许一个副本会按比例缩小以在按钮上使用它。虽然
GC
不会收集所有复制到流中的数据,但内存中将有多个副本。     
尝试限制图像高度。您可以将DecodePixelHeight属性设置为BitmapImage。 转换字节需要一些时间,但最大高度将受到限制,内存使用量将减少。
                var bmpImg = new BitmapImage();
                msImage.Position = 0;
                bmpImg.BeginInit();

                 bmpImg.DecodePixelHeight =containerHeight; 

                bmpImg.CacheOption = BitmapCacheOption.OnLoad;
                bmpImg.StreamSource = msImage;
                bmpImg.EndInit();
                return bmpImg;
P.s.也许那里会有内存泄漏。 http://code.logos.com/blog/2008/04/memory_leak_with_bitmapimage_and_memorystream.html     

要回复问题请先登录注册