我该打给哪一个?
是否有必要同时调用这两个函数?
如果我已经调用了它们中的一个,另一个会抛出异常吗?
发布于 2018-12-14 21:55:22
以上都不是。您不需要调用Close
或Dispose
。
MemoryStream
不持有任何非托管资源,因此唯一要回收的资源是内存。当您的代码不再引用MemoryStream
时,内存将在垃圾回收期间与MemoryStream
对象的其余部分一起回收。
如果您有一个对MemoryStream
的长期引用,则可以将该引用设置为null,以允许对MemoryStream
进行垃圾收集。Close
和Dispose
既不释放steam缓冲区,也不释放MemoryStream
对象。
由于Stream
和MemoryStream
都没有终结器,因此不需要调用Close
或Dispose
来调用GC.SuppressFinalize
来优化垃圾收集。没有要取消的终结器。
MemoryStream的文档是这样说的:
此类型实现
IDisposable
接口,但实际上没有任何资源可供处理。这意味着不需要通过直接调用Dispose()
或使用语言结构(如using
(在C#中)或Using
(在Visual Basic中))来处理它。
发布于 2010-11-25 15:52:45
您可以使用using
块来实现这一点。当超出其作用域时,它将自动调用Dispose
。
示例:
using (MemoryStream ms = new MemoryStream())
{
// Do something with ms..
}
// ms is disposed here
希望这能帮上忙。
发布于 2010-11-25 15:29:32
使用using
块,以便在对象实现IDisposable
接口时将其释放
https://stackoverflow.com/questions/4274590
复制相似问题