정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

TwinParadox 2019. 3. 26. 13:04
728x90

Dispose 호출해야 하는 경우

'의심 스럽다면 처분 하는 원칙' 따름.

Windows Forms 컨트롤들, 파일 네트워크 스트림, 네트워크 소켓, GDI+ /브러시/비트맵 등이 이에 해당.

 

 

Dispose 호출하지 말아야 하는 경우

현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우

System.Drawing namespace 형식에서 정적 필드 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용

 

Dispose 메서드가 현재 상황에 맞지 않는 경우

System.IO namespace System.Data namespace 형식들

MemoryStream - 차후 스트림을 다시 쓰는 경우

StreamReader, StreamWriter - 스트림을 계속 열어둬야 하는 경우

IDbConnection - 나중에 Open으로 다시 열려

DataContext - 게으르게 평가되는 질의가 context 연결되었을 가능성이 있을

 

객체의 설계 차원에서 Dispose 필요하지 않고, 객체 처분 과정에서 프로그램이 필요 이상으로 복잡해지는 경우

System.ComponentModel namespace WebClient, StringReader, StringWriter, BackgroundWorker 클래스

이들 클래스는 그저 베이스 클래스가 처분 가능한 것일 뿐이므로, 메서드 범위를 넘어서 계속 사용되는 상황이면 이상 사용하지 않는 상황을 계속 확인하는 작업 자체가 프로그램을 복잡하게 .


728x90