2010-05-19 6 views

답변

4

기본적으로 .NET 데이터베이스 연결에는 pooling이 사용됩니다. Close()Dispose()을 호출하면 풀에 연결이 해제되고 실제로 강제로 닫히지 않습니다. 결국 그것은 풀에서 시간이 초과되고 실제로 닫힙니다. 연구의 조금 후

, 그것은 예측 가까이하는 두 가지 방법이있을 것 같다 :

    연결 문자열에
  1. 안 풀링 -
  2. 풀링을 제외하고 당신에게 모든 서비스를 제공해야하는 OLE DB Services = -2;를 추가하려고
  3. 후자는 제한 시간 함께 플레이 할 수도 있습니다 접근을 위해 OleDBConnection.ReleaseObjectPool()

을 활용하는 것을 시도하십시오 - 링크 MSDN 문서에서 발췌 :

메서드 만 호출해도 실제로 풀에있는 활성 연결은 해제되지 않습니다.

하면 풀이 마지막으로 배치되기 전에 발생해야 다음 닫기

  1. 전화는 풀에 연결 개체를 반환합니다.
  2. 각 연결 개체가 풀에서 시간 초과되도록 허용하십시오.
  3. ReleaseObjectPool을 호출하십시오.
  4. 가비지 수집을 호출하십시오.

나는 어떤 사내 소프트웨어, 오래된 유연성, 색다른 및 절대적으로 중요 독점 소프트웨어의 조각과 상호 작용해야하는 작업에서 이것에 대한 사용 사례가 있습니다. 다른 소프트웨어가 "문제가 될 수있는"창을 최소화하기 위해 가능한 한 짧은 시간 동안 공유 MDB 데이터베이스 파일을 열어야합니다 (아주 나쁜 것).

닫기를 보장하는 것이 더 간단 해 보이고 내 소프트웨어가 실제로 풀에서 이익을 얻지 못하기 때문에 연결 문자열 접근 방식을 사용할 계획입니다.

0

아니 그 뒤에서) (닫기 호출 이후 코드는 폐기()를 호출 한 후 핸들을 닫지 않지만, 다음은 당신이 일반적으로 보이는 방식으로 코드를 작성하는 데 도움 수 있습니다 이유를 확인하십시오

using (OleDbConnection conn = new OleDbConnection(connString)) 
{ 
    //your stuff here 
    conn.Close(); //not necessary, but doesn't hurt 
} 

예외가 발생했는지 여부에 관계없이 핸들을 닫습니다. 블록을 사용하면 블록 끝의 자원을 닫거나 폐기합니다.

+0

정말 이상합니다. 나는 실제로 처분하고 닫을 것을 요청하고있다. – Jonn