2010-04-30 32 views
5

Estoy usando un diccionario para almacenar datos y lo almacenaré en la memoria caché. Me gustaría evitar problemas de memoria del servidor y tener un buen rendimiento al limitar el tamaño del Diccionario <>, ya sea en tamaño o en número de entradas.
¿Cuál es el mejor método para hacer esto? ¿Hay otra clase que deba considerar aparte de un diccionario?C# Dictionary Performance

Respuesta

2

hay varias otras clases que puede seleccionar como

puede revisar las opciones al examinar System.Collections.Generic espacio de nombres.

Su es un muy buen puesto, pros describibg y los contras de todo la mayoría de las clases de colección en MSDN

Si no está satisfecho con lo que estas clases se ofrecen, se puede elegir su propia clase de colección o diseñar un custom Dictionary usted mismo.

tendrá que heredar su diccionario personalizado de interfaz IDictionary y otras clases/interfaces o puede escribir todo desde cero.

Aquí está la firma de Dictionary class en 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 
+0

no tengo necesidad de ordenar. El diccionario funciona bien para mí ya que puedo obtener el valor por clave. Mi principal preocupación es el tamaño que puede tener el Diccionario. – derek

+0

Acabo de darle algunas opciones más para mirar. ¿Por qué no derivar su propio diccionario y "enderezar" sus reglas de crecimiento con las que prefiere? –

+0

excelente enlace. Parece que tendré que crear una clase personalizada. – derek

5

No necesita limitar el tamaño del diccionario para lograr un buen rendimiento.

A medida que la documentación dice:

Recuperando un valor utilizando su clave es muy rápido, cerca de O (1)

+2

Si permite que el diccionario crezca sin límites, puede terminar usando toda la memoria direccionable. Depende del hardware, puede o no tener problemas de rendimiento debido al intercambio mucho antes. –

0

Una cosa a tener en cuenta es que al inicializar un diccionario puede establecer la capacidad inicial. Si sabe qué tan grande será su lista, configúrela al tamaño correcto y no tendrá ningún espacio "desperdiciado". Si no especificas la capacidad, establecerá una capacidad de inicio predeterminada y cambiará de tamaño/crecerá según sea necesario, lo que tomará un golpe de rendimiento.

+0

el tamaño será variable, por lo que su crecimiento es mi principal preocupación. Me gustaría limitar la capacidad máxima, ya que se almacenará en la memoria caché del servidor. Esto será parte de una aplicación web. – derek

+0

Especificar un tamaño inicial no limita el tamaño. – Rolf

1

Usted tendrá que crear su propia clase que hereda de la clase Dictionary. Anule los métodos Agregar y establecer Artículo para limitar el número de entradas a medida que se agregan objetos.

1

"Un caché sin una política de caducidad es solo una pérdida de memoria".

(Lo sentimos, no atribuido, ya que no sé que primero lo dijo.)

+0

la caché tiene una política de caducidad no deslizante y una dependencia, solo quiere asegurarse de que no crezca demasiado en esa ventana de caducidad. – derek