需要明确关闭吗?

时间:2009-08-09 12:01:48

标签: .net enterprise-library dispose

我正在使用EntLib 4.1。

_db = DatabaseFactory.CreateDatabase("DbName");
DbCommand dbCommand = _db.GetStoredProcCommand("someProcedure");
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result = _db.ExecuteNonQuery(dbCommand);

执行任务后,我需要处理_db对象,如:

finally
{
    _db = null;
}

......或者EntLib Framework会自动处理吗?

3 个答案:

答案 0 :(得分:3)

我知道这是古老的历史,但我不能留下这些答案。

需要处置数据库实例。它甚至没有实现IDisposable。

执行需要处置您已创建的显式DbCommand对象。

答案 1 :(得分:2)

执行_db = null不会丢弃该对象。

您必须执行_db.Dispose(),或使用using块。

垃圾收集会在非确定性时间处理对象,但是一旦你创建了一个实现IDisposable的对象,你应该确保你总是调用Dispose()(当然,除非你将它交给一个对象)或承诺这样做的其他功能。)

在这种情况下,很容易看出工厂没有办法知道你何时完成了这个物体,所以你必须自己处理它。

答案 2 :(得分:0)

垃圾收集将在超出范围时处置该对象。所以你的代码会起作用,但这不是最好的解决方案。

最好将数据库对象的创建放在using语句中。