He leído aquí en SO que Hashtable y Dictionary son prácticamente iguales, excepto por las ventajas de evitar el boxeo/unboxing.Diccionario vs uso de memoria Hashtable
Uso de la Ants Profiler I medir una aplicación muy sencilla con las siguientes estructuras:
class Node
{
Dictionary<string, Node> Children = new Dictionary<string, Node>();
}
y
class NodeOld { Hashtable Children = new Hashtable(); }
Ok, una lista de 1,5 millones de casos de la primera toma aproximadamente 140Mb, mientras que el segundo necesita más de 700Mb (sistema de 64bits).
Entonces, hay una GRAN diferencia en la implementación, ¿no?
las hormigas de perfiles revela un gran número de objetos Hashtable + cubo en el ejemplo de grandes dimensiones ...
Entonces, ¿hay una opción equivalente (memoria inteligente) para los diccionarios, si usted tiene que pegarse a 1.1?
Sospecho que Dictionary se implementa utilizando un árbol binario autoequilibrante en lugar de una tabla hash. Además, ¿el consumo de memoria que encontró después de la recolección de basura o el total acumulado? A medida que el Hashtable se redimensionaba (a medida que se agregaban más elementos), probablemente crearía más y más Cubos (aunque los más antiguos serían elegibles para la colección). –
para la tabla hash que usa 700MB, muchos de los cubos están vacíos ? – saus
Esto describe la implementación interna de .NET HashTable y el Diccionario http://msdn.microsoft.com/en-us/library/ms379571%28v=vs.80%29.aspx – hatchet