내부적으로 SortedDictionary<TKey, TValue>
은 TreeSet<KeyValuePair<TKey, TValue>>
을 사용합니다. 트리는 Node<T>
을 사용하며 분명히 노드 사이의 참조를 사용하므로 각 키와 값 외에도 왼쪽 및 오른쪽 노드와 몇 가지 추가 속성에 대한 참조가 있습니다. Node<T>
은 클래스이므로 각 인스턴스에는 기존의 참조 유형의 오버 헤드가 있습니다. 또한 각 노드에는 IsRed
이라는 부울이 저장됩니다.
WinDbg/SOS에 따르면 48 비트에서 64 비트의 단일 노드 크기이므로 10000 개가 480000 바이트 이상을 차지합니다.
0:000> !do 0000000002a51d90
Name: System.Collections.Generic.SortedSet`1+Node[[System.Collections.Generic.KeyValuePair`2[[System.Int32, mscorlib],[System.Int32, mscorlib]], mscorlib]]
MethodTable: 000007ff000282c8
EEClass: 000007ff00133b18
Size: 48(0x30) bytes <== Size of a single node
File: C:\windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll
Fields:
MT Field Offset Type VT Attr Value Name
000007feeddfd6e8 4000624 18 System.Boolean 1 instance 0 IsRed
000007feee7fd3b8 4000625 20 ...Int32, mscorlib]] 1 instance 0000000002a51db0 Item
000007ff000282c8 4000626 8 ...lib]], mscorlib]] 0 instance 0000000002a39d90 Left
000007ff000282c8 4000627 10 ...lib]], mscorlib]] 0 instance 0000000002a69d90 Right
. NET 런타임에 오신 것을 환영합니다. –
나무이기 때문에. SortedList와 정렬되는 일반 목록이 있습니다. (적절한 위치에 항목을 삽입하십시오.) – harold