その先にあるもの…

WeakReference 본문

프로그래밍/C#

WeakReference

specialJ 2014. 6. 3. 11:34

약한 참조


Class Test{}


Test pTest = new Test();

Test pRef = pTest;

pTest = null;

CG.Collect();


강한 참조를 보여주는 코드이다.

가비지에서는 pRef에 참조가 있기 때문에 메모리를 해제하지 못한다.


Class Test{}


Test pTest = new Test();

WeakReference pRef = new WeakReference( pTest );

pTest = null;

CG.Collect();


약한 참조를 보여주는 코드

참조를 하였지만 가비지에서는 메모리를 수거해간다. 




P.S

mono 2.8.6.3 .net 4.0에서 테스트

Class Test{}


Test pTest = new Test();

WeakReference pRef = new WeakReferencepTest );

pTest = null;

CG.Collect();

Console.WriteLine( "pRef : {0}", ( pRef.Target == null ? "dead", "live" ) );


pRef : live


CG.Collect();를 수행한 후에도 pRef.Target이 살아있다.

다른 함수에서 pRef를 가져와서 출력해보니 죽어있음을 확인

시간이 지나서 소멸되는 것인가 확인하기 위해

System.GC.WaitForFullGCComplete();

를 호출하니 오류 발생.


조금 더 테스트가 필요한다.






'프로그래밍 > C#' 카테고리의 다른 글

클래스가 소멸할 때 멤버변수가 클래스인 것은 null이 되는지 궁금  (0) 2014.09.19
Dictionary value 변경  (0) 2014.09.01
CreateInstance, InvokeMember  (0) 2014.04.21
unsafe  (0) 2014.03.28
C#> struct -> string  (0) 2013.10.31
Comments