加载图像时内存泄漏C#

时间:2016-12-26 09:31:42

标签: wpf image image-processing memory-leaks bitmap

我写了一个代码来将图像加载到<image>控件中,因为我需要编辑并保存在多个地方使用的相同图像,所以我可以修改代码以避免{{ 1}}。现在我得到了Access violation error

Out of memory exception

我需要知道上面代码中是否有内存泄漏,或者是否有更好的方法来加载符合我要求的图像。

2 个答案:

答案 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无法帮助您,则需要第三方解决方案。