(연관된 글이 1개 있습니다.)
WeakReference의 간단한 예제를 찾아 테스트 해보던중 궁금한 결과가 생겨서 질문 드립니다.
서로 순환 참조를 걸고 순환 참조한 Target의 인스턴스를 null로 처리 했을경우
WeakReference의 Target이
VS에서 CPU 플랫폼이 x64일 경우는 정상적으로 null로 처리가 되지만
x86이거나 AnyCPU일 경우 WeakReference의 Target이 제거 되지 않고 그대로 남아 있는 현상이 있습니다.
제가 테스트를 잘못한 것인지 왜 이런 결과가 나오는지 답변 부탁드립니다.
아래 제가 테스트 했었던 코드를 간단하게 글로 남기겠습니다.
테스트 환경 : VS2013 / Win8.1
public class Man
{
public string Name
{
get;
private set;
}
public Man(string name)
{
Name = name;
}
}
class Program
{
static void Main(string[] args)
{
TestWeakReference();
Console.ReadKey();
}
private static void TestWeakReference()
{
Man m = new Man("A");
//약한참조
WeakReference refMan = new WeakReference(m);
m = null;
GC.Collect();
Console.WriteLine("약한 참조 원본: {0}", (m == null ? "null" : m.Name));
Console.WriteLine("약한 참조 참조: {0}", (refMan.Target == null ? "null" : (refMan.Target as Man).Name));
}
x64 결과 -
약한 참조 원본: null
약한 참조 참조: null
x86 결과 -
약한 참조 원본: null
약한 참조 참조: A
[연관 글]
[최초 등록일: ]
[최종 수정일: 3/14/2016]