【发布时间】:2016-01-31 09:02:15
【问题描述】:
PetaPoco.Database 对象实现了 IDisposable,但我很少看到包含如下 using 语句的代码示例(包括 PetaPoco 的 own website):
using (var db = new Database("MyConnectionString"))
{
// Do database stuff
}
大多数时候我只是看到:
var db = new Database("MyConnectionString");
// Do database stuff
// I never see .Dispose() called.
实际上应该如何处理 PetaPoco.Database 对象?
【问题讨论】:
-
如果它实现了 IDisposable 你应该确保调用 Dispose。而且,无论如何,如果 Dispose 方法什么都不做,你就没有什么可松动的
-
但是如果 IDisposable 被实现了,那么我不应该把它放在一个“使用”块中,因为这通常是“使用”的使用方式吗?
-
@Howiecamp 是的,你应该这样做。他们没有在示例中这样做,因为当
AppDomain被程序销毁时,GC 会处理它。 -
@Behrooz - 谢谢。但不确定如果这样做是最佳实践,为什么不会在示例中显示它。当 AppDomain 被销毁时,GC 当然总是会处理所有事情,但是 IDisposable 的全部意义在于您希望在此之前很久就释放这些资源。所以我不确定我是否理解那里的逻辑。
-
@Howiecamp 我认为您比他们更了解逻辑。他们不是神。
标签: c# .net dispose idisposable petapoco