이 작은 스 니펫은 참조 된 객체를 키로 사용하여 사전에 저장된 카운트 값 (정수)을 증가시키는 것입니다. 사전이 작 으면 여러 조회가 중요하지 않지만이 사전은 상당히 커질 수 있습니다.Dictionary 값의 값 유형에 대한 포인터 사용
Private RefCount As IDictionary(Of ILifeTimeManaged, Integer)
......... CODE HERE.....
Private Sub IncrementRefCount(ByVal entity As ILifeTimeManaged)
Dim prevCount As Integer
''# if we have no reference entry, add one and set its count to 1
If Not RefCount.TryGetValue(entity, prevCount) Then
RefCount.Add(entity, 1)
Else
''# otherwise increment its count by 1
RefCount.Item(entity) = prevCount + 1
End If
End Sub
해당 사전 항목을 찾은 다음 값에 저장된 int를 증가 시키거나 새 사전 항목을 추가합니다.
사전 값에 대한 포인터를 사용하는 것은 좋지 않은 생각입니까? 그런 다음 이미 값을 얻었 으면 두 번째 키 조회를 피할 수 있습니다. 어떻게 구현하겠습니까? .NET4에서도 가능합니까?
IntPtr을 사용하여 어떻게 할 수 있습니까? 나쁜 생각처럼 보이지 않는 http://msdn.microsoft.com/en-us/library/system.intptr.aspx
RefCount.Item(entity) = prevCount + 1
맞긴하지만 여기에서는 언 박싱 비용 대 제 사전 검색 비용을 비교합니다. – Matthew
명확히하기 : 참조 객체를 사용하기 위해 컨테이너를 사용하는 경우 컨테이너의 "상자 해제"에 대해 설명합니다. – Matthew
@Matthew PK : 당신은 Ref의 "unboxing"과 Dictionary의 "unboxing"을 가지고 있기 때문에이 함수에서 Ref의 승리가되어야합니다. 그러나 이것은 확실히 마이크로 최적화입니다. –