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

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

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

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

此处提供的代码示例不使用usingClose()Dispose()

由于StreamResourceInfo的文档没有提到Close()Dispose() (并且StreamResourceInfo实际上并不从Stream或其他可能实现这些方法的东西inheritance),我认为让对象超出范围和垃圾是安全的。收集自然。

我怀疑StreamResourceInfo类有一个终结器,它在垃圾收集期间调用基础Stream对象上的Dispose() ,但我目前没有可用的Reflector副本来validation。 在这方面, IDisposable模式非常强大。

但是,如果您仍然对这种不确定性感到不舒服,则可以始终在Stream对象上调用Close()

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

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

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

编辑 – 将评论从评论转移到此处:StreamResourceInfo不负责关闭/处理Stream。 除非你将Stream传递给其他东西(例如StreamReader),否则关闭流是你的工作。 找到了一个可能引起关注的链接 。