我最近接管了使用针对移动设备的.NET紧凑框架编写的代码库的责任,我看到代码分散在Dispose()
遍布到处。
这似乎在
我认为垃圾收集器会处理内存管理。我知道如果没有Dispose()
,他们可能会在内存中停留一段时间,但这些电话有多大优势或好处?它似乎污染了代码的整洁。
答案 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不使用引用计数器,一个无法访问的对象仍然可能存在并且正在使用存储器,相反,可以通过仍然可访问的方式来处理对象。