2011-03-28 3 views
3

다음 코드에서 기본 코드에 Foo 유형의 명명되지 않은 변수 인스턴스에 대한 하드 참조가 있거나 가비지 수집에 취약한 항목입니까?using 절의 암시 적 변수가 가비지 수집됩니까?

using(new Foo()) 
{ 
    // Something done here. 
} 

수집 항목이 코드 블록에서 참조되고 있지 않도록 자원 일부 참조 카운팅을 수행 단지 세마포어 타입의 객체이다.

+0

'using' 블록은 블록의 끝에 개체를 배치합니다. Ergo, 처분 할 참고가 있어야합니다. – SLaks

답변

10

using 절은 개체를 포함하는 숨겨진 로컬 범위 변수를 만듭니다.이 변수는 생성 된 finally 절에서 사용됩니다.

이 변수는 개체가 GC되지 않도록합니다.

see this variable in the spec 수 있습니다.

3
using(new Foo()) 

Foo의 익명 인스턴스는 사용하여 블록 후 범위 밖으로 이동하고 쓰레기는 수집 될 수 있습니다.