MemoryStream必须明确处理?

bon*_*obo 6 .net dispose memorystream

由于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.
Run Code Online (Sandbox Code Playgroud)

因此,MemoryStream对象上的引用将丢失.这种情况需要try/finally-block(或using语句)吗?

SLa*_*aks 16

通常,必须始终处理所有一次性物品.

但是,MemoryStream实际上并不需要处理,因为它没有任何非托管资源.(它只是一个byte[]和一个int)
它首先是一次性的唯一原因是它继承了Stream实现的抽象类IDisposable.

请注意,必须处理所有其他流.

  • 不同意你不应该在这个实例中调用Dispose,虽然它可能不是"需要"的事实是它实现了IDisposable接口,应该通过using或try/catch/finally来调用,因为实现细节在理论上可以改变在某些时候,既然你忽略了对接口的尊重,你就可以得到一个本可以避免的bug (3认同)
  • @Aaron:在这种特殊情况下,这种情况不太可能**. (3认同)

Aar*_*ver 4

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

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