C#에서 using문을 사용하면 그 안에서 생성한 객체는 using문 종료시 자동으로 삭제된다고 한다.

하지만 얼마전 안 사실을 보면 일부분 오류가 생길 수 있는것 같다.


C#에서는 일단 using 문 사용시 객체를 소멸시키도록 하는 것 맞다.

하지만 컴파일러 입장에서는 객체를 재사용하는게 효율적이다


무슨 말이냐 하면 

using문에서 만약 DB 연결 객체를 생성했다 치자

그렇다면 using문이 끝나면 해당 객체를 삭제시키는게 맞다.

하지만 DB연결 객체는 모든 사용자들이 거의 필수로 사용하는 객체다


때문에 컴파일러 입장에서는 이 객체를 재사용하는게 효율적이기 때문에 해당 객체를 재사용하는 경우가 생긴다.

이번에 알아낸 점은 만약 DB객체가 소멸되지 않고 계속 재사용된다면 DB서버입장에서는 리소스를 계속 할애한다.


즉 문을 열고 닫아야 하는데 그 문이 열린체로 계속 유지되는 꼴이다.


그래서 얼마전 DB서버에서 이상하게 리소스를 많이 잡아먹는 부분이 발견됬었는데 알고보니 DB연결 객체를 계속 재사용하고 있어서였다.


만약 DB서버같이 리소스를 관리해야 하는 객체라면 using문 안에서 사용했더라도 dispose시켜주는게 좋을 것 같다.


+ Recent posts