1. Dispose란?
C#에서는 객체의 메모리를 해제하기 위해 IDisposable 인터페이스를 구현하고, Dispose()메소드를 통해 메모리를 해제합니다.
2. 왜 쓰는가?
1) 일반적인 메모리 해제 방법
일반적으로 메모리 해제를 하기 위해서는 try-finally 블록으로 finally 블록에서 메모리를 해제하는 구문을 작성하게 됩니다.
Char[] buffer = new Char[50];//try-finally로 메모리 해제하는 표현{StreamReader s = new StreamReader("File1.txt");try{int charsRead = 0;while (s.Peek() != -1){charsRead = s.Read(buffer, 0, buffer.Length);//Process characters read.}}finally{if (s != null){((IDisposable)s).Dispose();}}2) using 문을 사용한 메모리 해제하지만 코드 라인을 너무 많이 차지하게 되고 매번 이러한 과정으로 메모리를 해제하기에는 비효율적이기 때문에using문을 사용하여 메모리를 해제시켜줍니다.// 위 처럼 try-finally로 메모리 해제를 직접 하지 않고, IDisposable 인터페이스가 구현된 클래스는 using문으로// 간단하게 표현 가능// 아래 예는 StreamReader.Dispose 메소드를 명시적으로 호출하지 않음using (StreamReader s = new StreamReader("File1.txt"),s2 = new StreamReader("File2.txt")) // using으로 여러 리소스를 가져올 수 있다. 두 개의 StreamReader 개체를 인스턴스화 함{int charsRead = 0;while (s.Peek() != -1){charsRead = s.Read(buffer, 0, buffer.Length);//Process characters read.}}3) 예외처리를 위한 try-catch-finally경우에 따라서 catch 블록을 포함해야 하는 경우는 1)의 방법처럼 finally 블록에서 메모리를 해제시켜줍니다.//catch 블록에서 예외 처리를 하기 위해 try블록을 포함해야 하는 경우는// try-catch-finally 블록을 사용하며, finally에서 Dispose()메소드를 호출하여 메모리를 해제해주면 됨StreamReader sr = null;try{}catch (FileNotFoundException fnfe){Console.WriteLine(fnfe);}catch (IOException io){Console.WriteLine(io);}finally{if (sr != null) sr.Dispose(); //널체크 필수}참고 : https://docs.microsoft.com/ko-kr/dotnet/standard/garbage-collection/using-objects
미리 정의된 형식 'System.ValueTuple`2'을(를) 정의하지 않았거나 가져오지 않았습니다. (0) | 2019.02.13 |
---|---|
LINQ (0) | 2019.02.13 |
Lambda Expression (0) | 2019.02.12 |
EventHandler (0) | 2019.02.12 |
Delegate (0) | 2019.01.29 |