Przeczytałem tutaj w SO, że Hashtable i Dictionary są prawie takie same, z wyjątkiem zalet unikania boksowania/rozpakowywania.Słownik vs użycie pamięci Hashtable
Korzystanie mrówki Profiler mierzę bardzo prostą aplikację z następujących struktur:
class Node
{
Dictionary<string, Node> Children = new Dictionary<string, Node>();
}
i
class NodeOld { Hashtable Children = new Hashtable(); }
Ok, listę 1,5 mln przypadków pierwsza trwa około 140 Mb, podczas gdy druga potrzebuje więcej niż 700 Mb (system 64-bitowy).
A zatem istnieje ogromna różnica w implementacji, prawda?
mrówki Profiler prezentuje ogromną liczbę obiektów Hashtable + wiadro na dużym rozmiarze przykład ...
Tak, jest tam opcja odpowiednik (pamięć wiedzą) dla słowników jeśli już trzymać się 1.1?
Podejrzewam, że słownik jest zaimplementowany przy użyciu samowyrównującego drzewa binarnego zamiast tabeli mieszania. Czy zużycie pamięci zostało wykryte po zebraniu śmieci lub po prostu skumulowane? Gdy zmieni się rozmiar Hashtable (w miarę dodawania kolejnych elementów), najprawdopodobniej będzie tworzyć coraz więcej segmentów (choć starsze będą kwalifikowały się do gromadzenia). –
dla hali, która zużywa 700 MB, wiele z nich jest pustych ? – saus
Opisano wewnętrzną implementację. HashTable i Dictionary http://msdn.microsoft.com/en-us/library/ms379571%28v=vs.80%29.aspx – hatchet