Estoy creando una biblioteca que estoy probando el rendimiento. En él genero un Dictionary<Type, X>
una vez. Los elementos se insertan actualmente en un orden aleatorio. El diccionario permanece sin cambios durante la vida útil de la aplicación.¿Alternativa más rápida que el diccionario <Type, X>?
A continuación, se utiliza con frecuencia para buscar elementos. La búsqueda es uno de los cuellos de botella más grandes en la biblioteca.
Sí, estoy micro-optimizando, pero para aprender. Me pregunto si hay una mejor manera de obtener el rendimiento de búsqueda.
actualización
he utilizado dotTrace para medir el rendimiento. El informe + dotTrace está en la computadora de mi casa, por lo que no tengo el informe aquí (podría haberlo cargado en otro lado).
que utilizan las pruebas que se encuentran aquí: https://github.com/danielpalme/IocPerformance
La definición del diccionario se encuentra aquí: https://github.com/jgauffin/Griffin.Container/blob/master/Source/Griffin.Container/ContainerBase.cs
(I creó el contenedor viernes pasado, no esperar demasiado)
Update2
Dictionary.TryGetValue
toma totalmente 101ms de Resolve
(total 251ms) que es 40,2% si interpreto correctamente los números.
a: ¿Cuántos tipos/pares hay en los datos, b: qué le hace pensar que es un cuello de botella? (es decir, ¿cómo ha medido? ¿podemos ver el código de búsqueda?) –
yc: ¿los llamantes utilizan tipos estáticos (es decir, 'int', etc.) o están utilizando objetos' Tipo' debido a la reflexión? si las personas que llaman conocen los tipos de manera estática, hay algunos trucos que podrían usarse. –
@MarcGravell: podría ampliar un poco esos trucos (respuesta o enlace) ya que es un tema interesante. gracias – mathieu