繁体   English   中英

UnmanagedMemoryStream处理和内存泄漏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM