.NET의 WeakReference 구현에는 IsAlive 속성이 있습니다.WeakReference에 중복 속성이 있습니까?
1) IsAlive
속성을 사용하거나 Target
속성이 null이 아닌지 여부를 테스트 할 때 성능/동작 차이가 있습니까?
2) IsAlive
은 중복 속성입니까?
감사합니다.
.NET의 WeakReference 구현에는 IsAlive 속성이 있습니다.WeakReference에 중복 속성이 있습니까?
1) IsAlive
속성을 사용하거나 Target
속성이 null이 아닌지 여부를 테스트 할 때 성능/동작 차이가 있습니까?
2) IsAlive
은 중복 속성입니까?
감사합니다.
1) 아니요. 내부적으로 IsAlive는 대상을 확인하는 것과 거의 동일한 논리를 수행하고 이것이 null인지 확인합니다.
2) 어느 정도는 ref.Target != null
이 ref.IsAlive
과 거의 같습니다. 그러나 IsAlive
은 표현력이 뛰어나며 코드를 유지할 때 이해하기가 쉽습니다.
소스 코드를 보면 동작간에 차이가 없습니다. obj.IsAlive
은 더 편리하고 읽기 쉽고 obj.Target != null
입니다.
개체에 대한 참조를 잠깐 보유해도 다음 개체가 생존 할 가능성이 매우 높은 동시 가비지 수집 시스템을 상상하는 것은 어렵지 않습니다 .Net (.Net에서는 상대적으로 작습니다. 그렇게 할 가능성). 그러한 시스템 하에서는, 객체의 Target 속성을 사용하여 그것이 죽었는지를 결정할 때, 필요 이상으로 객체를 오래 유지하는 성가신 부작용이있을 수 있습니다. IsAlive 속성을 사용하면 위험을 피할 수 있습니다.
IsAlive는 개체가 죽었는지 확인하는 데에만 안정적으로 사용할 수 있습니다. 객체가 살아 있다고보고하면 그 객체를 획득 할 수도 그렇지 않을 수도 있습니다.
현재 구현에서 그럴 수도 있지만, 하드웨어 지원 동시 GC의 향후 구현에서 'WeakReference'의 대상을 검색하면 다음 컬렉션에서 생존 할 가능성이 상당히 높아질 수 있습니다 ; 타겟에 관심이 없지만 예를 들어 'WeakReference' 자체가 그 타겟이 죽었을 때 콜렉션에서 제거합니다.'IsAlive'가'Target'을 체크하는 것보다 낫다는 것을 확인하십시오. – supercat