C#类对象获取非托管资源的是什么?有清单吗?

Rob*_*ler 2 .net c# dispose unmanaged textreader

当我看到这篇博客文章时,我正在使用XML来编写和反序列化类对象,该博客文章介绍了如何使用隔离存储区在Windows Phone 7上执行此操作.Windows Phone 7是我正在开发的平台:

此示例中,他显式调用Dispose()的唯一对象是TextReader对象.我在MSDN上查找了TextReader对象,发现文档说这个:

释放TextReader使用的非托管资源,并可以选择释放托管资源.

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

SLa*_*aks 5

显然我不想开始在每个对象上调用Dispose()

错误.

通常,任何实现的对象IDisposable应在完成后立即处理,通常使用该using语句.

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

唯一的例外是实现基类IDisposable中的情况下,一些派生出来的系统有什么处置(如IEnumerator,ComponentTextReader).
但是,并不总是很明显需要处理哪些具体实现(并且可能随时更改),因此无论如何都应该始终处置它们.

  • 即使它只是"残留",你也无法知道,除非你检查源代码.实现`IDisposable`是与调用者的一个契约,他们将确保对象在完成后被处理掉.实现细节可能会发生变化,但您无法做出这些假设. (3认同)