2009-08-09 7 views
0

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 프레임 워크가 자동으로 처리 할 것인가?

+0

변수를 명시 적으로 null로 설정할 필요가 거의 없습니다. 참조 : http://blogs.msdn.com/b/csharpfaq/archive/2004/03/26/97229.aspx –

답변

2

_db = null을 지정하면 개체가 삭제되지 않습니다.

_db.Dispose()를 사용하거나 using 블록을 사용해야합니다.

가비지 수집은 개체를 비 결정적 시간에 처리하지만 IDisposable을 구현하는 개체를 만들 자마자 Dispose()를 항상 호출해야합니다 (물론 Dispose()를 사용해야합니다. 객체 또는 그것을 할 것을 약속하는 다른 함수).

이 경우 개체를 완료 한 시점을 공장에서 알 수 없으므로 직접 처리해야합니다.

0

가비지 수집은 범위를 벗어날 때 개체를 처리합니다. 따라서 코드가 작동하지만 이것이 최상의 솔루션은 아닙니다.

using 문에 데이터베이스 개체를 만드는 것이 좋습니다.

3

나는 이것이 고대의 역사라는 것을 알고 있지만, 나는이 답을 남겨 둘 수 없다.

아니요은 데이터베이스 인스턴스를 삭제해야합니다. IDisposable을 구현하지도 않습니다.

은 사용자가 만든 명시 적 DbCommand 개체를 처리해야합니다.

관련 문제