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
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
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)
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. –
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.
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.
"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.)
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
- 1. C# Shallow copy Dictionary?
- 2. C# Dictionary to .csv
- 3. C# Dictionary of arrays
- 4. C# Dictionary Memory Management
- 5. C# Array or Dictionary?
- 6. WPF C# Application Performance
- 7. C# Decimal datatype performance
- 8. C++ Serialization Performance
- 9. C# merge sort performance
- 10. C/Python Socket Performance?
- 11. C# Dictionary usando TValue dentro de otro Dictionary
- 12. Hashtable vs Dictionary
- 13. Dictionary/HashTable Object in C++?
- 14. Tecla siguiente en C# Dictionary
- 15. CALayer performance vs. UIImageView performance
- 16. C# Dictionary <> y teclas mutables
- 17. convertir HashTable a Dictionary en C#
- 18. C# dictionary o simplemente sigue usando listas?
- 19. Serialización y deserialización V.Large Dictionary en C#
- 20. Static Vs Instance Method Performance C#
- 21. C# performance question: typeof (MyClass) vs. this.GetType()
- 22. Pymongo Query with Dictionary in Dictionary?
- 23. Log4Net performance
- 24. OracleBulkCopy Performance
- 25. string.IndexOf performance
- 26. Dictionary = Hash?
- 27. Cómo convertir Dictionary <string, object> a Dictionary <string, string> en C#
- 28. C# cast Dictionary <string, AnyType> to Dictionary <string, Object> (Involving Reflection)
- 29. POST json dictionary
- 30. Boost tuple performance
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
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? –
excelente enlace. Parece que tendré que crear una clase personalizada. – derek