简体   繁体   中英

C# Dictionary Performance

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<>, either in size or number of entries.
What is the best method of doing this? Is there another class I should be considering other than a Dictionary?

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)

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

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.

"A cache without an expiration policy is just a memory leak."

(Sorry, unattributed as I don't know who first said it.)

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM