¿Qué es más eficiente, Diccionario o Lista?
1. Los conceptos básicos
Lista
Diccionario
2 Similitudes y diferencias entre Dictionary
En primer lugar, muchas personas están de acuerdo con el hecho de que Dictionary
1 Diccionario 2 dic.Add(1, 5); 3 dic.Add(10, 3); 4 dic.Add(2, 5) ; 5 foreach (tecla int en dic.Keys) 6 { 7 Console.WriteLine(key); 8 } 9 10 Hashtable hashtable = new Hashtable(); 11 hashtable.Add(1, 5); 12 hashtable .Add(10, 3); 13 hashtable.Add(2, 5); 14 foreach (clave de objeto en hashtable.Keys) 15 { 16 Console.WriteLine(key.ToString()); 17 } El diccionario Y cuando usamos Reflector para ver el código fuente, también encontraremos que Hashtable es seguro para subprocesos, pero Dictionary obviamente no tiene esa característica. 3. Principio de almacenamiento del diccionario Hablando de diccionario, tenemos que hablar de su estructura de almacenamiento. Calculará lo que debe almacenar en función de la clave. Cálculo hash. Esta es también la razón por la que la clave debe ser la única en la tabla hash. Cuando buscamos según la clave, primero calculamos la dirección de memoria virtual donde se almacena en función de la clave y luego vamos a la. dirección de memoria correspondiente para encontrar los datos y obtener su valor. Esto es lo mismo que HashTable. 4. Pregunta Para discutir la eficiencia del Diccionario y la Lista al atravesar, un experto escribió un código, que es una imagen Es muy obvio. , LIST es mucho más eficiente. 5. Análisis de problemas También es una colección, ¿por qué existe tal brecha en el rendimiento? Tenemos que comenzar con los principios de estructura de almacenamiento y sistema operativo. En primer lugar, entendemos que List En cuanto a HashTable o Diccionario, es una dirección de memoria generada en base al análisis del algoritmo Key y Hash, por lo que es macroscópicamente discontinuo, aunque Microsoft también ha optimizado mucho su algoritmo. Debido a tal discontinuidad, el Diccionario inevitablemente generará una gran cantidad de cambios de página de memoria durante el recorrido, mientras que Lista solo requiere cambios mínimos de página de memoria. Esta es la eficiencia de Lista y Diccionario al atravesar. la diferencia. 6. Hablemos de Diccionario nuevamente Muchas personas pueden decir que dado que Diccionario es tan poderoso, ¿por qué no usamos Diccionario para reemplazar todas las colecciones? Además del problema de recorrido de ahora, aquí también debemos mencionar el problema de espacio de almacenamiento del Diccionario. En Diccionario, además de almacenar el Valor que realmente necesitamos, también necesitamos una Clave de variable auxiliar. lo que provoca que esto elimine un doble desperdicio de espacio en la memoria. Y cuando se inserta al final, List solo necesita continuar con el almacenamiento en función de su dirección original, pero Dictionary necesita realizar cálculos Hash complejos, que también es donde se pierde rendimiento.