[英]UnmanagedMemoryStream disposal and memory leaks
考虑以下代码片段,并忽略缺少using子句或显式处理的问题:
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局部变量的事实不会改变任何内容-它只是堆栈上对堆上对象的引用。 该方法退出时,该引用将从堆栈中删除。 因此,无论该方法是否静态,在内存泄漏方面都不会改变。
这里的内存泄漏可能是因为从未丢弃过映像且从未收集过垃圾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.