I am using a Dictionary to store data, and will be caching it. I would like to avoid server memory issues, and have good performance by limiting the size of the Dictionary&
There are several other classes you can select from like
you can review the options by looking at System.Collections.Generic Namespace.
Their is a very good post, describibg pros and cons for all most of the collection classes at MSDN
If you are not satisfied by what these classes are provide, you can go for your own collection class or design a custom Dictionary
your self.
you will need to inherit your custom dictionary fron IDictionary Interface and other classes / interfaces or may write all from scratch.
Here is the signature for Dictionary class at MSDN
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>,
IEnumerable<KeyValuePair<TKey, TValue>>,
IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
One thing to keep in mind is that when you initialize a Dictionary you can set the initial capacity. If you know how big your list will be, set it to the correct size and you won't have any "wasted" space. If you don't specify the capacity, it will set a default starting capacity and resize/grow as needed, which takes a performance hit.
You don't need to limit the size of the Dictionary to archieve good performance.
As the documentation says:
Retrieving a value by using its key is very fast, close to O(1)
"A cache without an expiration policy is just a memory leak."
(Sorry, unattributed as I don't know who first said it.)
You will need to create your own class inheriting from the Dictionary class. Override the Add and set Item methods to limit the number of entries as objects are added.