首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MemoryStream.Close()或MemoryStream.Dispose()

MemoryStream.Close()或MemoryStream.Dispose()
EN

Stack Overflow用户
提问于 2010-11-25 15:25:43
回答 9查看 69.8K关注 0票数 79

我该打给哪一个?

是否有必要同时调用这两个函数?

如果我已经调用了它们中的一个,另一个会抛出异常吗?

EN

回答 9

Stack Overflow用户

发布于 2018-12-14 21:55:22

以上都不是。您不需要调用CloseDispose

MemoryStream不持有任何非托管资源,因此唯一要回收的资源是内存。当您的代码不再引用MemoryStream时,内存将在垃圾回收期间与MemoryStream对象的其余部分一起回收。

如果您有一个对MemoryStream的长期引用,则可以将该引用设置为null,以允许对MemoryStream进行垃圾收集。CloseDispose既不释放steam缓冲区,也不释放MemoryStream对象。

由于StreamMemoryStream都没有终结器,因此不需要调用CloseDispose来调用GC.SuppressFinalize来优化垃圾收集。没有要取消的终结器。

MemoryStream的文档是这样说的:

此类型实现IDisposable接口,但实际上没有任何资源可供处理。这意味着不需要通过直接调用Dispose()或使用语言结构(如using (在C#中)或Using (在Visual Basic中))来处理它。

票数 18
EN

Stack Overflow用户

发布于 2010-11-25 15:52:45

您可以使用using块来实现这一点。当超出其作用域时,它将自动调用Dispose

示例:

代码语言:javascript
运行
复制
using (MemoryStream ms = new MemoryStream())
{
    // Do something with ms..
}
// ms is disposed here

希望这能帮上忙。

票数 9
EN

Stack Overflow用户

发布于 2010-11-25 15:29:32

使用using块,以便在对象实现IDisposable接口时将其释放

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

https://stackoverflow.com/questions/4274590

复制
相关文章

相似问题

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