【问题标题】:Should I close streams returned by Assembly.GetManifestResourceStream?我应该关闭 Assembly.GetManifestResourceStream 返回的流吗?
【发布时间】:2012-08-10 17:03:46
【问题描述】:

我认为这是一种很好的做法,当使用Assembly.GetManifestResourceStream 方法访问嵌入式程序集资源时,在完成后关闭返回的Stream。但是,我刚刚在以下文章中发现了一些内容:

http://msdn.microsoft.com/en-us/library/ms950960.aspx

// Get the stream that holds the resource
// NOTE1: Make sure not to close this stream!
// NOTE2: Also be very careful to match the case
//        on the resource name itself
Stream stream =
  assem.GetManifestResourceStream("Azul.jpg");

// Load the bitmap from the stream
this.BackgroundImage = new Bitmap(stream);

这里的评论说应该关闭流,尽管文章没有提及原因。谷歌搜索没有提供任何结论;有些人似乎关闭了这个流,有些人没有,并说垃圾收集器会处理它。

我应该关闭Assembly.GetManifestResourceStream 返回的流吗?我不应该有什么特别的原因吗?

【问题讨论】:

    标签: c# stream


    【解决方案1】:

    该评论不希望您关闭它,因为它会继续从中创建一个Bitmap 对象。 通常,您应该在使用完流后关闭它们,否则您的应用程序将受到内存泄漏的影响。

    【讨论】:

    • 它确实继续从中创建位图,但是为什么它仍然没有在 创建位图之后关闭它?
    • 该示例使用位图作为 Windows 窗体的背景图像,因此在窗体的整个生命周期中都需要位图(和基础流)。不幸的是,这不是展示如何正确管理 IDisposable 对象的一个​​很好的例子。
    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2011-03-11
    • 2013-08-05
    • 2011-09-01
    • 2023-01-06
    相关资源
    最近更新 更多