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() ?如果包含方法是非静态的,这将如何改变?在这种情况下是否可能发生非托管内存泄漏?
当image
被处置时,它将处置流- Image.FromStream
有效地获得给定流的所有权。
特别是,如果在这里的using
语句中处理流,则图像将不可用,至少对于某些图像类型。
除了Jon的回答-将方法更改为非静态将没有效果。在静态方法中使用Image局部变量不会改变任何东西——它只是堆栈上对堆上对象的引用。当方法退出时,引用将从堆栈中删除。因此,无论方法是否是静态的,都不会改变内存泄漏。
这里的内存泄漏的可能性是,如果图像从来没有被处置,从来没有垃圾收集。