阅读Dispose pattern,我看到文档反复提到“清理托管和非托管代码”。在Dispose
方法的规范实现中,我看到了特定的流(取决于disposing
是真还是假),专门用于清理托管对象与非托管对象。
但是,我是一个低级的新手,知道哪些类型是管理的,哪些是不受管理的?
答案 0 :(得分:5)
Unmanaged意味着本机Win32对象,主要是处理;和对原始COM对象的引用。这些资源不受.NET CLR控制(或由其管理)。
答案 1 :(得分:3)
简短版本是:需要在IDisposable
方法中调用任何也实现Dispose
的内容。 FxCop还会告诉您是否遗漏了某些内容(或根本不使用IDisposable
)。
答案 2 :(得分:2)
托管或非托管并不重要。如果一个类实现了IDisposable接口,那么在完成该对象后应该调用Dispose()。或者(最好)利用using statement在对象超出范围时自动调用Dispose()。
@ Rob:
答案仍然是一样的。如果您的类管理实现IDisposable的任何内部对象,那么它也应该实现IDisposable。在Dispose()方法中,对这些对象调用Dispose。
答案 3 :(得分:0)
如果您不知道,您正在使用的类型可能已被管理。
非托管类型是指不安全的类型,即不符合CLR安全要求。
<强>更新强>
我不理解downvote?问题是具体如何区分托管和非托管类型?
所有其他答案都是针对IDispose问题,而不是托管/非托管问题!?
更新2
仍然没有解释第二个downvote ...
我同意,应始终处理IDisposable
对象,但这不会回答有关托管与非托管的问题。
答案 4 :(得分:0)
我建议您在使用它们后建议销毁所有资源。通常依赖于系统资源的任何内容,例如要显式发布的套接字和流资源。如有疑问,请继续处理。从长远来看,可以为您节省大量的调试麻烦。通常,当您调用非.NET编写的代码时,您可以认为它不是“托管代码”。