평소에 강한 참조에 대해 별로 신경안썼는데......
WeakReference Class를 이용해 테스트 해보았다.
결론은 삭제 역할을 하지 않는 개체의 필드에 삭제될 개체를 놓게 된다면 강한 참조가 일어난다.
그 후 개체가 삭제 된 후에도가비지 컬렉터가 제거를 하지 못해서 Memory Leak 또는 잘못 사용 될 수 있으니
WeakReference Class의 약한 참조를 이용
class Man { } class Program { static void Main(string[] args) { TestStringReference(); TestWeakReference();
Console.ReadKey(); } /// <summary> /// WeakReference Class를 이용해 약한 참조 테스트 /// 참조 중인 개체는 null이됨 /// </summary> private static void TestWeakReference() { Man m = new Man(); WeakReference refMan = new WeakReference(m); //약한참조 m = null; GC.Collect();
Console.WriteLine("약한 참조 원본: {0}", (m == null ? "죽었음" : "살았음")); Console.WriteLine("약한 참조 참조: {0}", (refMan.Target == null ? "죽었음" : "살았음")); }
/// <summary> /// 강한 참조 테스트 /// 참조 중인 개체는 null이 되지 않음 /// </summary> private static void TestStringReference() { Man m = new Man(); Man refMan = m; //강한 참조 m = null; GC.Collect();
Console.WriteLine("강한 참조 원본: {0}", (m == null ? "죽었음" : "살았음")); Console.WriteLine("강한 참조 참조: {0}", (refMan == null ? "죽었음" : "살았음")); } }
|
결과화면 :
'.Net > C#' 카테고리의 다른 글
C# 5.0 다중 스레드[2] - 프로덕션 코드에서 스레드를 중단시키지 말자 (0) | 2014.08.21 |
---|---|
C# 5.0 다중 스레드[1] - 프로덕션 코드에서 스레드를 유휴 상태로 만들어서는 안 된다. (0) | 2014.08.21 |
C# null조건 검사하지 않고 event 발생키시기 (0) | 2013.07.30 |
C# Keys 열거형 (0) | 2013.07.11 |
C# 4.0 선택적 매개변수, 명명된 매개변수 (0) | 2013.01.10 |