2009-10-21 10 views
1

.NET의 WeakReference 구현에는 IsAlive 속성이 있습니다.WeakReference에 중복 속성이 있습니까?

1) IsAlive 속성을 사용하거나 Target 속성이 null이 아닌지 여부를 테스트 할 때 성능/동작 차이가 있습니까?

2) IsAlive은 중복 속성입니까?

감사합니다.

답변

3

1) 아니요. 내부적으로 IsAlive는 대상을 확인하는 것과 거의 동일한 논리를 수행하고 이것이 null인지 확인합니다.

2) 어느 정도는 ref.Target != nullref.IsAlive과 거의 같습니다. 그러나 IsAlive은 표현력이 뛰어나며 코드를 유지할 때 이해하기가 쉽습니다.

3

소스 코드를 보면 동작간에 차이가 없습니다. obj.IsAlive은 더 편리하고 읽기 쉽고 obj.Target != null입니다.

+0

현재 구현에서 그럴 수도 있지만, 하드웨어 지원 동시 GC의 향후 구현에서 'WeakReference'의 대상을 검색하면 다음 컬렉션에서 생존 할 가능성이 상당히 높아질 수 있습니다 ; 타겟에 관심이 없지만 예를 들어 'WeakReference' 자체가 그 타겟이 죽었을 때 콜렉션에서 제거합니다.'IsAlive'가'Target'을 체크하는 것보다 낫다는 것을 확인하십시오. – supercat

0

개체에 대한 참조를 잠깐 보유해도 다음 개체가 생존 할 가능성이 매우 높은 동시 가비지 수집 시스템을 상상하는 것은 어렵지 않습니다 .Net (.Net에서는 상대적으로 작습니다. 그렇게 할 가능성). 그러한 시스템 하에서는, 객체의 Target 속성을 사용하여 그것이 죽었는지를 결정할 때, 필요 이상으로 객체를 오래 유지하는 성가신 부작용이있을 수 있습니다. IsAlive 속성을 사용하면 위험을 피할 수 있습니다.

IsAlive는 개체가 죽었는지 확인하는 데에만 안정적으로 사용할 수 있습니다. 객체가 살아 있다고보고하면 그 객체를 획득 할 수도 그렇지 않을 수도 있습니다.

관련 문제