c# - 哪些 C# 类对象获取非托管资源?有名单吗?

标签 c# .net dispose unmanaged textreader

当我看到这篇博文时,我正致力于使用 XML 对类对象进行序列化和反序列化,该博文展示了如何使用隔离存储区域在 Windows Phone 7 上执行此操作。 Windows Phone 7 是我开发的平台:

this example ,他明确调用 Dispose() 的唯一对象是 TextReader 对象。我在 MSDN 上查找了 TextReader 对象,发现 the documentation是这样说的:

Releases the unmanaged resources used by the TextReader and optionally releases the managed resources.

所以我假设他这样做的原因是立即释放 TextReader 对象获取的非托管资源。如果不是因为他的博客文章,我不会想到这样做。显然,我不想对可见的每个对象都开始调用 Dispose(),那么至少要调查某个特定对象何时应调用 Dispose() 的良好经验法则是什么?是否有一些指导方针或某个地方的列表,至少是需要这种特殊处理的流行 .NET 对象?

最佳答案

Obviously I don't want to start calling Dispose() on every object in

错了。

一般来说,任何实现了IDisposable的对象应该在您完成后立即处理,通常使用 using声明。

大多数没有非托管资源的对象不实现IDisposable (并且没有 Dispose() 方法),因此您无需担心。

唯一的异常(exception)是实现 IDisposable 的基类以防某些派生实现需要处理(例如 IEnumeratorComponentTextReader )。
但是,需要处置哪些具体实现并不总是很明显(并且它可能随时发生变化),因此您应该始终处置它们。

关于c# - 哪些 C# 类对象获取非托管资源?有名单吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15801884/

相关文章:

c# - XML 序列化以将请求发送到 SOAP 服务 C#

c# - 我怎样才能在鼠标输入事件中做到这一点,新的表单/用户控件将移动到 Form1 的中心?

c# - 有没有办法在不关闭 StreamWriter 的情况下关闭其 BaseStream?

c# - 在 Android 中重新选择选项卡时如何更改 TabbedPage 图标?

c# - 如何将输入值绑定(bind)到 Blazor 中的对象属性

.net - 我应该在 DDD .NET 中为有界上下文使用单独的项目吗?

c# - SslStream.DataAvailable 不是有效函数

c# - 使用 .NET 删除目录中超过 3 个月的文件

c# - 在 C# 中处理/关闭 ExchangeService?

java - 关闭窗口 - 但不停止程序 - JAVA