我有什么理由在使用.NET Compact Framework时调用Dispose()

时间:2012-10-31 21:44:57

标签: .net compact-framework dispose

我最近接管了使用针对移动设备的.NET紧凑框架编写的代码库的责任,我看到代码分散在Dispose()遍布到处。

这似乎在

  • ADO.NET db命令
  • Windows窗体

我认为垃圾收集器会处理内存管理。我知道如果没有Dispose(),他们可能会在内存中停留一段时间,但这些电话有多大优势或好处?它似乎污染了代码的整洁。

3 个答案:

答案 0 :(得分:5)

  

我知道如果没有Dispose(),它们可能会在内存中挂起一段时间,但这些电话有多大优势或好处?我

这很大程度上取决于这些调用所处理的IDisposable不是(必然)关于释放内存,而是释放资源。一般情况下,如果没有逻辑上的巨大箍,你总是应该在可能的情况下调用Dispose on objects,并且除非必要,否则不要依赖GC来清理资源。

鉴于你在CF上运行,它可能更为重要。如果您的计划的目标是资源有限的平台,那么尽快清理这些资源非常重要。

答案 1 :(得分:2)

通常,但并非总是如此,对Dispose的调用是释放非托管资源。作为一种好的做法,应该为任何具有Dispose methed的类型调用Dispose。

答案 2 :(得分:0)

.NET在Dispose()个对象上调用IDisposable ...即当GC清理托管的IDisposable对象时,它会调用Dispose()清除任何对象对象使用的非托管资源....在这种情况下,调用Dispose()似乎完成的主要事情是更加确定性地释放非托管资源(因为.NET不使用引用计数器,一个无法访问的对象仍然可能存在并且正在使用存储器,相反,可以通过仍然可访问的方式来处理对象。