기본적으로 매니지드 언어에서는 가비지 컬렉터에  모든 리소스를 자동으로 관리한다고 소개하고 있다. 
하지만 예외로 외부의 비관리 영역상의 자원에 대해서는 관리 되지 않는 부분이 있는데.


파일 핸들

메모리 핸들

데이터베이스 연결

소켓 핸들

스레드 핸들

세마포어

등 비관리 자원들에 포함 된다.

 

C# 에서 네임스페이스에 쓰이는 using 아닌 , 비구조적 예외 처리에 쓰이는 using 문이 있는데

코드를 한번쯤 다뤄본 경험이 있다면 작성된 using 문을 본 경험이 있으실거라 생각한다.

 

데이터 베이스 연결 부분을 예시로 들어 본다고 한다면.

using (SqlConnection connection =new SqlConnection(connectionString))
{
    SqlCommand command =new SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}

 

using{  } 범위에서의 자원들은 영역에서 벋어 나게 되면 자원을 반납하게 되며 해당 범위에서

예외(오류) 생기더라도 자동적으로 자원을 반납되게 된다.

하여 비관리 영역상의 자원 관리는 선택적인 사항이 아니라, 반드시 숙지하고 활용해야 할 사항이다.

 

만약 집중되어 사용량이 몰릴 경우 자원이 고갈되어 시스템에 문제가 생길 수 있기 때문에

이를 사전에 예방하고 효율적으로 관리하기 위해서 명시적인(IDisposable 인터페이스) 소멸자를 직접 구현하거나

앞서 설명 하고 있는 using 문을 사용한 외부 비관리 자원들의 관리를 해야 한다.

 

 

 

 

+ Recent posts