2013-02-11 3 views
2

일회용 객체는 사용이 끝나면 폐기해야합니다. 질문 : Windows 데스크톱 응용 프로그램 (예 : WPF 또는 WinForms)의 전체 수명 기간 동안 사용되는 일회용 객체 (예 : 데이터베이스 컨텍스트)가있는 경우 : 해당 객체를 응용 프로그램 종료 이벤트에 처리해야합니까 (왜, 언제 , 그렇지 않을 때)?Windows 데스크톱 응용 프로그램에서 일회용 종속성 처리

+2

데이터베이스 컨텍스트 *는 응용 프로그램의 전체 수명 동안 살아서는 안됩니다. 그들은 오래 살아있는 물건으로 설계되지 않았습니다. 각 DB 작업을 수행 할 때 다시 작성해야합니다. – Servy

답변

0

일반적으로 응용 프로그램의 수명 동안 살아있는 일회용 개체가 없어야합니다. 데이터베이스 컨텍스트와 같은 많은 개체가 일 경우 해당 범위에서을 사용할 수 없습니다.

실제로해야 할 일은 개체가 IDisposable 패턴을 "올바르게"구현하는지 여부에 달려 있습니다. 일회용 객체가 파이널 라이저를 구현하면 Dispose을 호출하지 않아도 응용 프로그램이 종료되면 폐기됩니다. 객체가 finalizer를 구현하지 않으면 누출 될 리소스가 문제가되지 않는 한 응용 프로그램이 종료 될 때 파기해야합니다. 예를 들어, 프로세스가 끝날 때 종료 될 메모리가 누출 될 경우 이벤트를 릴리스 할 필요가 없습니다. 이벤트 만 수신을 취소하면 실행 할 필요가 없습니다. 확실하지 않은 경우 정확히Dispose 방법으로 출시되면 안전하고 어쨌든 호출해야합니다.

+0

내 응용 프로그램에서 로컬 DB (예 : SQL CE)를 사용하는 경우 답변을 이해할 수없는 몇 가지 점이 있습니다. 모든 작업에 컨텍스트를 처리해야하는 이유는 무엇입니까? 내 문맥을 IoC를 통해 주입 시켜서 싱글 톤으로 선언하십시오. 프로세스 종료에 대해 이야기하는 두 번째 요점은 프로세스가 종료 될 때 응용 프로그램에서 사용하는 모든 리소스를 다시 메모리 섹션, 파일, db 등으로 되 돌리는 것입니다. 그렇다면 왜 그 자원을 처분하십시오. 감사합니다 –

+0

@Sniffer 아니요, 프로세스가 종료 될 때 항상 처리 메소드가 수행 할 자원을 회수 할 수있는 것은 아닙니다. Dispose 메서드에서 회수 된 모든 리소스가 프로세스가 해체 될 때 자동으로 수행된다는 사실을 명확히 알기 전까지는 처리해야합니다. 데이터베이스 컨텍스트에 관해서는; 당신은 많은 자원을 묶어두고 항상 열려 있습니다. 단일 트랜잭션에 사용되는 짧은 수명의 오브젝트가되도록 설계되었습니다. – Servy

관련 문제