Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 채보
- OpenCV
- paramiko
- mysql
- pytorch
- Docker
- SSH
- YOLO
- 프로그래머스
- Linux
- 핑거스타일
- C++
- label
- Selenium
- error
- LIST
- JSON
- windows forms
- Numpy
- 기타 연주
- VS Code
- Python
- pip
- Visual Studio
- 오류
- ubuntu
- 컨테이너
- C
- pandas
- C#
Archives
- Today
- Total
기계는 거짓말하지 않는다
C# using문, Dispose 본문
일반적인 using문의 용도는
1. 네임스페이스에서 형식 사용을 허용 (ex. using System;)
2. 네임스페이스나 형식에 대한 별칭 (ex. using MSBOX = System.Windows.Forms.MessageBox;)
그러나 파일 및 글꼴과 같은 관리되지 않는 리소스 해제를 위한 IDisposable 개체가
제대로 처리될 수 있게 만드는 데도 사용한다.
IDisposable 인터페이스는 관리되지 않은 리소스 해제를 위한 메커니즘을 제공하고,
가비지 컬렉터는 해당 개체가 더 이상 사용 되지 않을 때 관리 되는 개체에 할당 된 메모리를 자동으로 해제 한다.
IDisposable 인터페이스는 Dispose 함수를 구현해야한다.
Dispose 함수는 주로 관리되지 않는 리소스를 해제하는 데 사용한다.
관리 되지 않는 리소스를 직접 사용 하는 class를 만들 때 다음과 같이 구현한다.
class TempClass : IDisposable
{
// Dispose 함수가 호출 됐는지
bool disposed = false;
// SafeHandle 인스턴스화
SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
// 호출 가능한 Dispose 함수
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// Dispose 패턴 구현
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
handle.Dispose();
// 관리 되는 다른 객체 해제
//
}
disposed = true;
}
~TempClass()
{
Dispose(false);
}
}
일반적인 Dispose 사용
TempClass tc = null;
try
{
tc = new TempClass();
// 다른 작업들..
}
finally
{
if (tc != null) tc.Dispose();
}
// 다른 작업들..
이를 using문을 사용하여 간단하게 바꿀 수 있다.
using (TempClass tc = new TempClass())
{
// 다른 작업들..
}
해당 using문의 블록을 벗어나면 자동으로 자원 할당을 해제한다.
단, IDisposable 인터페이스 구현이 되어있지 않다면,
"using 문에 사용된 형식은 암시적으로 'System.IDisposable'로 변환할 수 있어야 합니다" 라는 오류 구문을 볼 수 있다.
'C#' 카테고리의 다른 글
C# 소수점 제한, 천 단위 콤마 출력 (0) | 2021.07.12 |
---|---|
C# Windows Forms MessageBox (0) | 2021.07.11 |
C# Windows Forms 키 입력 필터 (0) | 2021.07.10 |
C# Windows Forms Clipboard 텍스트, 이미지 얻기 (0) | 2021.07.10 |
C# Windows Forms 키 입력 활성화, 동시 키 입력 (0) | 2021.07.07 |
Comments