I am looking at the Collection
classes in MSDN for the .Net framework.
I ran into the HybridDictionary
and it states (http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):
Implements IDictionary by using a ListDictionary while the collection is small, and then switching to a Hashtable when the collection gets large.
So I wondered about the ListDictionary
which states (http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx)
Recommended for collections that typically include fewer than 10 items.
Now that seems like an arbitrary number (of items) to me. I can't find in the documentation what the mechanism behind this would be, I suspected the boundary of performance would have been related to a number of items like 2^N (2 to the power of N).
Now I do use the collection type of Dictionary
often, and the collections might contain 10 to 30 items, 50 tops, depending on the 'page size'.
But HybridDictionary
and ListDictionary
requires unboxing and there are no generic type contructors for them.
I can't find a comparison anywhere about the performance of a HybridDictionary
vs Dictionary
.
So when to actually use this HybridDictionary
over other Dictonary types?
P.S. And if HybridDictionary
switches to ListDictionary
or HashTable
when the number of items grow to optimize its functioning. Why ever use a ListDictionary
? If some requirements in the software change, and suddenly a maximum of 20 items must be put in the ListDictionary
, instead of a maximum number of 10 items, the code must be re-factored to HybridDictionary
to maintain performance?
In Dictionary, you can store key/value pairs of same type. In Hashtable, there is no need to specify the type of the key and value. In Dictionary, you must specify the type of key and value. The data retrieval is slower than Dictionary due to boxing/ unboxing.
Dictionary is faster than hashtable as dictionary is a generic strong type. Hashtable is slower as it takes object as data type which leads to boxing and unboxing.
HybridDictionary attempts to optimize Hashtable. It implements a linked list and hash table data structure. It implements IDictionary by using a ListDictionary when the collection is small, and a Hashtable when the collection is large.
@BrianJ: Both HashTable (class) and Dictionary (class) are hash tables (concept), but a HashTable is not a Dictionary , nor is a Dictionary a HashTable .
When to use a HybridDictionary over other Dictionary types?
You would use the ListDictionary
when you are certain the collection size will be less than 10 items.
The HybridDictionary
is pretty much the same as Dictionary
but will take advantage of the performance of ListDictionary
when the collection size is less that 10 items. Once the collection grows above 10 the HybridDictionary
will switch from using ListDictionary
internally to using a HashTable
like an ordinary Dictionary
.
So when to use one, well if your collection is usually under 10 items but at times could grow larger, then HybridDictionary
will be the one to use.
For example, we use HybridDictionary
in our mobile device applications comms layer, the comms message queue will pretty much always be under 10 items, but if there is a backend server outage the comms messages will build up into the 100's or 1000's depending on how long the server is down, a ListDictionary
in this scenario would be awful, and in that case HybridDictionary
will switch to a HashTable
to keep performance up and still give us maximum performance when it is under 10.
So its used in specialized places, hence the namespace it belongs to System.Collections.Specialized
:)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With