UnmanagedMemoryStream处理和内存泄漏

本文关键字:泄漏 内存 处理 UnmanagedMemoryStream | 更新日期: 2023-09-27 18:06:30

考虑下面的代码片段,忽略使用子句或显式处理的缺失:

<>以前 public static Image GetImage(string imageName) { Image image = null; Stream unmanagedMemoryStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(imageName); image = Image.FromStream(unmanagedMemoryStream); return image; } 之前

何时在unmanagedMemoryStream上调用Dispose() ?如果包含方法是非静态的,这将如何改变?在这种情况下是否可能发生非托管内存泄漏?

UnmanagedMemoryStream处理和内存泄漏

image被处置时,它将处置流- Image.FromStream有效地获得给定流的所有权。

特别是,如果在这里的using语句中处理流,则图像将不可用,至少对于某些图像类型。

除了Jon的回答-将方法更改为非静态将没有效果。在静态方法中使用Image局部变量不会改变任何东西——它只是堆栈上对堆上对象的引用。当方法退出时,引用将从堆栈中删除。因此,无论方法是否是静态的,都不会改变内存泄漏。

这里的内存泄漏的可能性是,如果图像从来没有被处置,从来没有垃圾收集。