2011-01-02 3 views
0

.net : 사용자 지정 데이터 액세스 계층 클래스가 Idisposable을 구현해야합니까? 그들은 주로 데이터를 저장/검색하기위한 데이터 저장소로 데이터베이스를 사용합니까?.net : 사용자 지정 데이터 액세스 계층 클래스가 Idisposable을 구현해야합니까?

고맙습니다.

+0

** 캡슐화되어 있기 때문에 'IDisposable'을 구현하는 객체를 처리해야합니까? ** 그렇다면 yes입니다. 그렇지 않으면 아니오. –

답변

1

배출은 관리되지 않는 리소스를 확보하는 데 주로 사용됩니다. 예를 들어 소켓, 데이터베이스 및 파일 핸들에 대한 연결.

당신이 어떤 관리되지 않는 리소스를 추적하지 않으면 자신 당신이하지 DbConnection는 GC에 의해 수집 될 때 모든 자원이 해제되기 때문에 IDisposable를 구현해야.

나는 두 가지 일을 수행 할 추천 : 당신은 멤버 변수로 DbConnection이있는 경우

A), IDisposable을 구현하고 Dispose 메서드에서 연결을 폐기하십시오. DAL을 사용할 때 using 키워드를 사용하는 경우에만 작동합니다.

b) using을 사용하여 가능한 한 빨리 리소스를 해제 할 수 있도록하십시오.

+1

어떤 종류의 IDisposable 개체라도 명시적인 문서가 없다면 GC로 안전하고 적절하게 정리할 수 있다고 가정하는 것은 위험합니다. 포기되었을 때 수명이 긴 객체의 이벤트를 구독하는 클래스의 경우 일반적으로 간접적 인 두 개의 추가 레이어 또는 모든 이벤트가 아닌 하나 이상의 작업을 통해 모든 이벤트를 라우팅해야합니다. 일부 이벤트 구독 데이터베이스 래퍼가이를 수행 할 수 있지만, 나는 그렇게하기 위해 모든 사람들에게 의존하지 않을 것이다. – supercat

+0

실제로, 당신이 이야기하는 이벤트는 IDisposable을위한 것이 아니라 가비지 수집 될 모든 개체에 대한 것입니다. OP는 Dispose를 호출하지 않아도되지만 IDisposable을 구현해야하는지 여부는 묻지 않았습니다. – jgauffin

관련 문제