평소에 강한 참조에 대해 별로 신경안썼는데...... 

 

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 ? "죽었음" : "살았음"));

        }

    }

 

 

 

 

         결과화면 :

 

 

+ Recent posts