我最近接手了使用 .NET 紧凑型框架为移动设备编写的代码库的职责,我看到代码散布在Dispose()
各处,到处都是调用。
这个好像开了
- ADO.NET 数据库命令
- Windows 窗体
我认为垃圾收集器会处理内存管理。我知道如果没有 ,他们可能会在记忆中停留更长时间Dispose()
,但是有这些电话有很多好处或收获吗?它似乎污染了代码的整洁性。
我最近接手了使用 .NET 紧凑型框架为移动设备编写的代码库的职责,我看到代码散布在Dispose()
各处,到处都是调用。
这个好像开了
我认为垃圾收集器会处理内存管理。我知道如果没有 ,他们可能会在记忆中停留更长时间Dispose()
,但是有这些电话有很多好处或收获吗?它似乎污染了代码的整洁性。
我知道如果没有 Dispose(),它们可能会在内存中停留更长时间,但是进行这些调用是否有很多优势或收益?我
这在很大程度上取决于这些调用所处置的内容。 IDisposable
不是(必然)关于释放内存,而是关于释放资源。一般来说,你应该总是在对象上调用 Dispose,如果你的逻辑中没有巨大的障碍,并且除非必要,否则不要依赖 GC 来清理资源。
鉴于您在 CF 上运行,它可能更加关键。如果您的程序针对的是资源有限的平台,那么尽快清理这些资源非常重要。
通常,但并非总是如此,调用 Dispose 是为了释放非托管资源。作为一种好的做法,应该为任何具有 Dispose 方法的类型调用 Dispose。
.NET 调用Dispose()
对象IDisposable
......即,当GC
清理托管IDisposable
对象时,它调用Dispose()
清理对象使用的任何非托管资源......在这种情况下,调用Dispose()
似乎完成的主要事情是更确定性地释放非托管资源(因为 .NET 不使用引用计数器,一个无法访问的对象可能仍然存在并正在使用内存,相反,一个对象可能被释放,仍然可以访问)。