由于MemoryStream是非托管资源,是否必须始终将其释放?
给定:
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)吗?
发布于 2010-11-16 23:31:08
通常,必须始终释放所有可丢弃的对象。
但是,MemoryStream实际上并不需要被释放,因为它没有任何非托管资源。(它只是一个byte[]和一个int)
它之所以是一次性的,首先是因为它继承了实现IDisposable的抽象Stream类。
请注意,必须释放所有其他流。
发布于 2010-11-16 23:28:43
任何实现IDisposable的类型都应该通过try/catch/finally块显式调用或通过using语句调用Dispose。
在这样的情况下,从技术上讲,MemoryStream不需要处理,但是,为了遵守接口并保护自己不受下游更改的影响,仍然应该调用Dispose。
发布于 2010-11-16 23:29:49
MemoryStream实现了IDisposable,因此在可能的情况下,使用using语句。
当这不可行时,将其设置为try/catch/finally块。
如果您需要让对象传递到代码的作用域之外(当使用或try/catch/finally不起作用时),调用者就有责任实现显式处理。
https://stackoverflow.com/questions/4195746
复制相似问题