释放WP7上Application.GetResourceStream返回的基础流

时间:2011-06-01 11:57:03

标签: c# silverlight windows-phone-7

使用Application.GetResourceStream访问资源时,它返回类StreamResourceInfo的实例,此类不实现IDisposable。

当我在WP7设备上处理完流后,我应该关闭\处理由StreamResourceInfo公开的底层流 - 我不想知道Using或Dispose模式。< / p>

一个例子是使用该方法访问ZAP包中包含的ZIP文件,一旦我解压缩文件,我就不再需要Stream实例了。

3 个答案:

答案 0 :(得分:3)

提供的代码示例here未使用usingClose()Dispose()

由于StreamResourceInfo的文档未提及Close()Dispose()(而StreamResourceInfo实际上并未继承Stream或其他可能实施的内容这些方法),我认为让对象超出范围并自然地收集垃圾是安全的。

我怀疑StreamResourceInfo类在垃圾回收期间有一个终结器在底层Dispose()对象上调用Stream,但是我没有可用的Reflector副本验证这一点的时刻。 IDisposable模式在这方面非常强大。

但是,如果您仍然对这种不确定性感到不安,可以随时在Close()对象上调用Stream

答案 1 :(得分:0)

我不知道具体的Windows 7手机,但标准做法是处置对象,如果它被打开它会自动关闭流。处置应该是对象的最终操作,而关闭表示重新打开的可能性。所以你应该在我看来处理。

答案 2 :(得分:0)

一旦到达Using范围结束,

using会自动调用dispose方法。所以,你可以做这样的事情。达到范围结束后,您的信息流将被删除。

 using (var stream = Application.GetResourceStream(new Uri("myResource.zip", UriKind.Relative)).Stream)
 {
       //stream code
 }

编辑 - 将评论从评论转移到此处: StreamResourceInfo不负责关闭/处理Stream。除非你将Stream传递给其他东西(例如StreamReader),否则关闭流是你的工作。 Found a link that may be of interest几乎与此相符。