Como escribí en algunos de mis últimos mensajes, todavía soy bastante nuevo en el mundo C# por lo que resulta que escribí un pequeño punto de referencia para comparar Dictionary, Hashtable, SortedList y SortedDictionary en cada otro. La prueba se ejecuta con 8000 iteraciones y de 50 a 100000 elementos. Probé la adición de nuevos elementos, la búsqueda de elementos y el bucle de algunos elementos al azar. Los resultados fueron como esperaba, excepto por el SortedDictionary, que me resultó muy confuso ... Fue lento en todos los resultados. Entonces me faltaba algo sobre el concepto de un diccionario ordenado. Ya le pregunté a google, pero todo lo que descubrí fue que otros habían llegado al mismo resultado de la prueba. Ligeramente diferente en función de su implementación de la prueba. De nuevo mi pregunta: ¿por qué el Sorticionado es mucho más lento que todos los demás?cuando debería usar un ordenado en lugar de un diccionario
Respuesta
Un SortedDictionary se implementa como un árbol de búsqueda binaria. Por lo tanto, acceder a un elemento es O (lg (n)). Un diccionario es una tabla hash, y tiene una complejidad de O (1) para el acceso.
Un SortedDictionary es bastante útil cuando necesita que los datos sean ordenados (un diccionario no tiene un orden definido). El diccionario es apropiado para la mayoría de los casos.
La respuesta es simplemente que usaría el SortedDictionary
si necesita un diccionario ordenado.
Recuerde que aunque terminó siendo el más lento en sus pruebas, aún no es lento. Si necesita exactamente lo que hace el SortedDictionary
, es la mejor solución. Hacer lo mismo usando Dictionary
o SortedList
sería mucho más lento.
Nuevamente mi pregunta: ¿por qué el Sorticodionario es mucho más lento que todos los demás?
Etienne ya dio la respuesta técnica antes, pero para añadir una observación más 'normal': supongo que la parte "Ordenado" poco de un SortedDictionary pone algo de sobrecarga en insertos e incluso recuperar artículos como parece de la respuesta de Etienne.
Sin embargo, en una aplicación real, SortedDictionary probablemente puede proporcionar un rendimiento considerable o un aumento del "rendimiento percibido" si necesita un "diccionario ya ordenado" en algún momento de su aplicación.
Espero que ayude.
- 1. ¿PHP tiene un diccionario ordenado?
- 2. ¿Cuándo y por qué debería usar una ruta de acceso nombrada en lugar de un diccionario?
- 3. ¿Cuándo debería usar un campo en lugar de una propiedad?
- 4. Diccionario revertido ordenado?
- 5. ¿Por qué debería usar var en lugar de un tipo?
- 6. Diccionario revertido ordenado en .NET
- 7. ¿Cómo hacer un diccionario ordenado en plantillas django?
- 8. ¿El diccionario Objective-C es un contenedor ordenado?
- 9. ¿Cómo iterar sobre un diccionario de Python, ordenado por valores?
- 10. equivalente a un diccionario ordenado que permite claves duplicadas
- 11. ¿Cuándo debería usar un vector de objetos en lugar de un vector de punteros?
- 12. ¿Cuándo debería usar un mapa en lugar de un bucle for?
- 13. Diccionario ordenado según el valor en C# (caché LRU)
- 14. Usar un diccionario en una propiedad cuadrícula
- 15. C# Iterar sobre Diccionario ordenado por valor
- 16. ¿Cuándo debería usar un gestor de scripts?
- 17. ¿Cuándo debería usar NSURL en lugar de NSString y viceversa?
- 18. ¿Cuándo debería usar una estructura en lugar de una clase?
- 19. Cuando debería usar AsParallel() en linq/plinq
- 20. ¿Cuándo debería usar un analizador?
- 21. ¿Por qué parece que el diccionario .Net está ordenado?
- 22. ¿por qué debería usar content_tag en lugar de html "normal"?
- 23. ¿Por qué debería usar url.openStream en lugar de url.getContent?
- 24. debería usar Entity Framework en lugar de raw ADO.NET
- 25. ¿Por qué debería usar una propiedad implementada automáticamente en lugar de un campo?
- 26. ¿Por qué debería usar int en lugar de un byte o abreviar en C#
- 27. ¿Cuándo debería usar el doble en lugar del decimal?
- 28. WPF: ¿Por qué debería usar un marco de MVVM existente en lugar de escribir el mío?
- 29. ¿Cuándo debería usar __forceinline en lugar de inline?
- 30. ¿Por qué debería usar git en lugar de svn?