我写了一个代码来将图像加载到<image>
控件中,因为我需要编辑并保存在多个地方使用的相同图像,所以我可以修改代码以避免{{ 1}}。现在我得到了Access violation error
。
Out of memory exception
我需要知道上面代码中是否有内存泄漏,或者是否有更好的方法来加载符合我要求的图像。
答案 0 :(得分:0)
我有类似于同一问题的东西,并通过加载像这样的图像来解决,
//代码:
替换,
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
decoder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
return decoder.Frames.FirstOrDefault();
}
使用,
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri(path);
bi.EndInit();
bi.Freeze();
return bi;
如果需要,请在bi
块中生成null
对象finally
。
答案 1 :(得分:0)
该代码不应导致泄漏。但是你应该考虑是否要冻结图像。 x.ImageSource.Freeze();
In what scenarios does freezing wpf objects benefit performace greatly
另外,如果你认为你有内存泄漏,你应该得到一个分析器。 Red Ant的分析器为我节省了数十次Red Ant's .Net Memory Profiler
说真的很值得,他们可能有免费试用或其他东西,但它可以找到许多泄漏源,如计时器,事件没有正确关闭等。非常有帮助。如果您不喜欢它们,那么请寻求其他解决方案,但如果您寻找泄漏,Visual Studio无法帮助您,则需要第三方解决方案。