POSOlSoft.MultiKeyDictionary performance comparison






Functionality implemented by the MultiKeyDictionary<TKey1, TKey2, TValue> class is similar to functionality of the Dictionary<Tuple<TKey1, TKey2>, TValue> class.
But MultiKeyDictionary class is much faster.

To check the speed of MultiKeyDictionary class add two files contained in the TupleDictionaryTest subdirectory to the new ConsoleApplication, then run the application to get actual to your computer results.

On my Intel Core i5 (2.67 GHz, 8 Gb RAM) computer under Windows 7 64bit TupleDictionaryTest application produces the following results:

      MultiKeyDictionary TupleDictionary
<int, int, int>
Add:              101 ms         1994 ms
TryGetValue:       39 ms         1841 ms
2 * TryGetValue:   98 ms         5505 ms
Remove:            14 ms          510 ms
Clear:              0 ms            3 ms
<string, string, int>
Add:              592 ms          751 ms
TryGetValue:      285 ms          623 ms
2 * TryGetValue:  907 ms         1706 ms
Remove:            71 ms          189 ms
Clear:              0 ms            3 ms

So MultiKeyDictionary<int, int, int> class performs about 20-50 times faster than Dictionary<Tuple<int, int>, int> class.
Whereas MultiKeyDictionary<string, string, int> class performs only about 2 times faster than Dictionary<Tuple<string, string>, int> class.
IMHO the difference between the two results is explained by string interning.

You can play with this test application to check performance of other MultiKeyDictionary class kinds and other MultiKeyDictionary's generic type arguments.