Internamente SortedDictionary<TKey, TValue>
utiliza TreeSet<KeyValuePair<TKey, TValue>>
. El árbol usa Node<T>
y, obviamente, utiliza referencias entre nodos, por lo que, además de cada clave y valor, tendrá referencias a los nodos izquierdo y derecho, así como algunas propiedades adicionales. Node<T>
es una clase, por lo que cada instancia tiene la sobrecarga tradicional de un tipo de referencia. Además, cada nodo también almacena un booleano llamado IsRed
.
De acuerdo con WinDbg/SOS el tamaño de un solo nodo en 64 bits en 48 bytes, de modo que 10000 de ellos ocuparán al menos 480000 bytes.
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
bienvenido al .net runtime. –
porque es un árbol. también hay SortedList y una lista simple que está ordenada (asegúrese de insertar elementos en su lugar) – harold