¿Es una clave string
más rápida que una clave int
en un Dictionary<,>
?Rendimiento clave para un diccionario
Respuesta
No. Antes que nada, Dictionary
[ACTUALIZADO] usa el código hash de las teclas para encontrarlas en su almacenamiento interno, en lugar de las teclas. Y Hashcode es un int
. Para int
, es solo el valor de int
, para string
debe generarse.
Así que usar int
es ligeramente más rápido.
De hecho código de generación de hash de una cadena es un proceso bastante complejo (el fragmento con el reflector) [espero que esto no se toma como la violación de derechos de autor porque no es]:
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b))^numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b))^numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
Un diccionario almacena las claves también, pero usa el código hash para determinar dónde almacenarlas. Respuesta un poco inexacta –
Sí. Tonto ... lo actualizaré. Quise decir para recuperar los valores. – Aliostad
Pero estoy de acuerdo con usted en que int es * ligeramente * más rápido, debido a que no hay ningún cálculo que realizar, como el que tiene que hacer el método 'string.GetHashCode()'. –
- 1. Ordenar un diccionario por clave Y valor?
- 2. dos cadenas de clave de un diccionario
- 3. Cambiar la clave de un diccionario
- 4. clave python en dict.keys() rendimiento para diccionarios grandes
- 5. Cómo buscar/verificar un valor de diccionario por clave
- 6. Python plantea un KeyError (para una clave fuera del diccionario) aunque la clave ESTÁ en el diccionario
- 7. ¿Agregar diccionario a un diccionario?
- 8. F # FSharpMap vs rendimiento del diccionario
- 9. C# palabra clave 'ref', rendimiento
- 10. Obtener la clave del diccionario utilizando el valor del diccionario
- 11. ¿Cómo usar la clave compuesta para el diccionario?
- 12. ¿Cuándo hacemos GetHashCode() para un diccionario?
- 13. Múltiples valores para la clave en el diccionario en Python
- 14. C# Diccionario con dos valores por clave?
- 15. Agregando pares de clave/valor a un diccionario
- 16. Usar un objeto como una clave de diccionario genérica
- 17. ¿Es posible crear un diccionario de clave débil en C#?
- 18. Eliminar una clave del diccionario por nombre de clave
- 19. C# diccionario con múltiples valores por clave
- 20. Diccionario devolver un valor predeterminado si la clave no existe
- 21. ¿Está bien utilizar una NSLocalizedString como clave en un diccionario?
- 22. Un diccionario con entradas múltiples con la misma clave
- 23. Obtener la clave más grande en un diccionario
- 24. Matrix como el diccionario de clave
- 25. JSON serializar un diccionario con tuplas como clave
- 26. POSTAL Diccionario JSON sin clave/valor Texto
- 27. Ordenar un diccionario por valor y luego la clave
- 28. clave no válida en el diccionario
- 29. diccionario ordenar por longitud de clave
- 30. C# diccionario una clave muchos valores
Cómo ¿determinó que el rendimiento clave es importante en su aplicación? No hagas optimizaciones prematuras. – jgauffin
Lo primero y más importante es decidir qué almacenar en el diccionario. Luego, mucho más tarde, si decide que tiene un problema de rendimiento, mida el rendimiento de su programa, identifique al candidato más importante para la optimización y comience allí. Es poco probable que su pregunta actual tenga un gran impacto, excepto quizás por usar el tipo de datos incorrecto en todo el lugar "en nombre del rendimiento". –
Si su espacio de claves interno es limitado, a veces puede salirse con la 'T []' y usar el indexador como clave, lo que consume más memoria pero es bastante más rápido que usar un diccionario. –