2012-03-21 2 views
1

이것은 내가 항상 궁금해 해왔 던 것입니다 .... 그것입니까?응용 프로그램이 닫히면 즉시 DB 연결이 닫힙니 까?

DB 연결을 사용하기 위해 코드를 작성할 때마다 항상 어떻게 든 다음 단계로 처리하기 전에 닫아야합니다.

하지만 ChildWindow가 생성자에서 연결을 열고 저장 단추 또는 취소 단추를 누르기 전에 닫히지 않는 경우. 그런 다음 전체 응용 프로그램이 닫힌 경우 즉시 DB 연결을 닫으시겠습니까? 또는 시간 제한을 기다려야하고 자동으로 닫힙니 까?

편집 :

public App() 
{ 

    ErrorHelper errorHelper = new ErrorHelper(); // Will open DB connection 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 

} 

/// <summary> 
/// For catch all exception and put them into log 
/// </summary> 
void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 

    errorHelper.WriteError(e.ExceptionObject as Exception);    

} 

것은 내가 매번 하나의 오류를 기록 내가 연결을 여는 방법을 좋아하지 않기 때문에 :

그래서 나는 내 응용 프로그램에 대한 모든 오류를 기록 오픈 라이브 연결을 유지하기 위해 노력하고 , 그래서 항상 연결을 유지하고 싶습니다. 이것은 내가 설명한 OP와 비슷합니다. 이 자세에서 항상 연결을 유지합니다. 하지만 DB 연결이 종료 된 후 즉시 닫힙니 까?

+1

@Oded, 기존 응용 프로그램의 동작에 대해 가상의 내용이 표시되지 않습니다. – mikerobi

+0

요청시 @Oded, 나는 작업중인 것을 제출했습니다. 그러나 mikerobi가 말했듯이, 나는 응용 프로그램을 종료하는 동작에 대해 알고 싶습니다. 연결을 닫을 수있는 해결 방법이 아닙니다. –

답변

2

짧고 간단한 대답 : 걱정

using (var db = new Connection()) 
{ 
    ... 
} 

을 한 후, 당신은하지 않을 것이다 -이 범위를 벗어나면 그냥 가까운, 그것의 끝이 될 것입니다 : 항상 using 문에 연결을 사용 메소드, 예외 또는 응용 프로그램이 종료되었습니다.

+2

사실이지만 질문에 대답하지 않습니다. –

+0

하지만 질문이 명확하지 않습니다 - 무엇을 성취하려고합니까? 연결이 닫히는 경우 알 수 있습니까? 연결이 닫히는 시점을 아십니까? 당신은 당신의 질문이 가설이 아니라고 @Oded했다. 구체적으로 말하십시오. –

+0

@OferZelig 응용 프로그램이 닫혀 있는지, 열려있는 모든 DB 연결이 즉시 닫히는 지 알고 싶습니까? DB 연결이 오랫동안 유지 될 가능성이 있다면 걱정할 필요가 없습니다. (응용 프로그램을 종료 한 후 즉시 연결이 닫히지 않고 1000 분의 1 사용자가 응용 프로그램을 종료했지만 잠시 기다린 후 닫으면 많은 사용되지 않은 연결이 유지 될 가능성이 있습니다.) 미안하지만 일부 사람들은 나는 그 문제를 복잡하게 만든다. 그러나 나는 다만 무슨 일이 일어날 지 명확한 생각을 갖고 싶습니다. –

2

내가 연결을 열 때마다 단일 오류를 기록하는 것이 좋지 않기 때문에 항상 연결을 유지하고 싶습니다.

이것이 바로 연결 풀링의 용도입니다. 실적을 측정 했습니까? 아니면 이것이 문제라는 강력한 증거를 찾았습니까?

using 블록을 사용하여 연결을 열고 닫은 다음 연결 풀에서 처리되도록하십시오.

프로세스가 종료되면 연결이 닫힙니다.

+0

'Using' 블록은 기본적으로'try {...} finally {obj.Dispose()}'입니다.NexusDB (예, 유명하지는 않음)를 사용할 때 기억합니다. ADO를 사용할 때마다 연결을 열면 연결을 한 번만 열고 모든 것을 작성하는 것보다 훨씬 느립니다. –

+1

@King Chan ADO.NET에는 연결 풀이 있습니다. http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx – dotjoe

+0

@dotjoe 우우, 알 겠어. 그것을 읽은 후에. 방금 ADO 오픈 연결 (MsSQL)을 사용하여 성능을 테스트하고 필요한 경우 언제든지 열 수있는 작은 프로그램을 작성했습니다. 그것은 같은 주위에. 이상합니다 ... 그렇다면 NexusDB로 테스트 할 때 훨씬 느립니다 ... +1 –

관련 문제