3

我最近接手了使用 .NET 紧凑型框架为移动设备编写的代码库的职责,我看到代码散布在Dispose()各处,到处都是调用。

这个好像开了

  • ADO.NET 数据库命令
  • Windows 窗体

我认为垃圾收集器会处理内存管理。我知道如果没有 ,他们可能会在记忆中停留更长时间Dispose(),但是有这些电话有很多好处或收获吗?它似乎污染了代码的整洁性。

4

3 回答 3

5

我知道如果没有 Dispose(),它们可能会在内存中停留更长时间,但是进行这些调用是否有很多优势或收益?我

这在很大程度上取决于这些调用所处置的内容。 IDisposable不是(必然)关于释放内存,而是关于释放资源。一般来说,你应该总是在对象上调用 Dispose,如果你的逻辑中没有巨大的障碍,并且除非必要,否则不要依赖 GC 来清理资源。

鉴于您在 CF 上运行,它可能更加关键。如果您的程序针对的是资源有限的平台,那么尽快清理这些资源非常重要。

于 2012-10-31T21:49:31.747 回答
2

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

于 2012-10-31T21:49:52.450 回答
0

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

于 2012-10-31T22:11:51.490 回答