首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemoryStream必须显式处理吗?

MemoryStream必须显式处理吗?
EN

Stack Overflow用户
提问于 2010-11-16 23:27:06
回答 4查看 3.1K关注 0票数 7

由于MemoryStream是非托管资源,是否必须始终将其释放?

给定:

代码语言:javascript
复制
1) A method is invoked.
2) A MemoryStream object is created (MemoryStream ms = new MemoryStream();).
3) An exception occurs and is caught from the invoking classes.

因此,MemoryStream对象上的引用将丢失。这个场景需要try/finally block(或using-statement)吗?

EN

回答 4

Stack Overflow用户

发布于 2010-11-16 23:31:08

通常,必须始终释放所有可丢弃的对象。

但是,MemoryStream实际上并不需要被释放,因为它没有任何非托管资源。(它只是一个byte[]和一个int)

它之所以是一次性的,首先是因为它继承了实现IDisposable的抽象Stream类。

请注意,必须释放所有其他流。

票数 17
EN

Stack Overflow用户

发布于 2010-11-16 23:28:43

任何实现IDisposable的类型都应该通过try/catch/finally块显式调用或通过using语句调用Dispose

在这样的情况下,从技术上讲,MemoryStream不需要处理,但是,为了遵守接口并保护自己不受下游更改的影响,仍然应该调用Dispose

票数 3
EN

Stack Overflow用户

发布于 2010-11-16 23:29:49

MemoryStream实现了IDisposable,因此在可能的情况下,使用using语句。

当这不可行时,将其设置为try/catch/finally块。

如果您需要让对象传递到代码的作用域之外(当使用或try/catch/finally不起作用时),调用者就有责任实现显式处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4195746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档