我一直在编写一个程序集来处理一些基本的图像操作,并遇到了一个绊脚石,我有点坚持解决。
问题的症结在于,当我创建一个新的System.Windows.Media.Imaging.WriteableBitmap
时,进程的结果私有字节会跳转到令人难以置信的数量。
我的测试控制台应用程序具有以下代码和几个断点,以查看内存使用量何时激增。
using (Stream imageStreamSource = new FileStream(@"c:\temp\input\snow.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
{
BitmapImage bmpi = new BitmapImage();
bmpi.BeginInit();
bmpi.CreateOptions = BitmapCreateOptions.None;
bmpi.StreamSource = imageStreamSource;
bmpi.EndInit();
var bmp = new WriteableBitmap(bmpi);
}
在.EndInit()
调用结束时,内存使用量只有几百个字节,但一旦WriteableBitmap
被实例化,内存就会跳到几百MB。
Memory Usage shown in Visual Studio
我正在尝试处理的图像不是世界上最大的图像(4134x2924),大小不到300KB。快速计算内存中代表32bpp所需的内容大约为40MB。除非我遗漏了一些明显的东西,否则看起来有些不对劲。
Image I'm working on as a test(snow.jpg)
我已经读过旧版Silverlight中WritableBitmap中可能存在的内存泄漏,但我使用的是.net 4.0,而且我还没有看到此版本泄漏的报告。
是否有人对此有任何见解或解决方案,因为它无法扩展到将在生产中占用大量内存的Web进程?