Estoy trabajando en una aplicación .NET 4.0, que realiza un cálculo bastante costoso en dos dobles que devuelven un doble. Este cálculo se realiza para cada uno de varios miles de artículos . Estos cálculos se realizan en un Task
subproceso en un subproceso de grupo.
Algunas pruebas preliminares han demostrado que los mismos cálculos se realizan una y otra vez, por lo que me gustaría caché n resultados. Cuando la caché está llena, me gustaría echar a los menos frecuentemente elemento utilizado recientemente. ( Editar: me di cuenta de que con menos frecuencia no tiene sentido, porque cuando el caché está lleno y reemplazaría un resultado por uno recién calculado, ese sería el que se usa con menos frecuencia y se reemplazará de inmediato la próxima vez que se calcule un nuevo resultado y agregado a la caché)
Para implementar esto, estaba pensando en usar un Dictionary<Input, double>
(donde Input
sería una mini-clase que almacena los dos valores dobles de entrada) para almacenar las entradas y los resultados almacenados en caché. Sin embargo, también necesitaría hacer un seguimiento de cuándo se utilizó un resultado la última vez. Para esto, creo que necesitaría una segunda colección que almacenara la información que necesitaría para eliminar un resultado del diccionario cuando el caché se estaba llenando. Me preocupa que mantener esta lista ordenada constantemente impacte negativamente el rendimiento.
¿Hay una manera mejor (es decir, más eficiente) de hacer esto, o tal vez incluso una estructura de datos común que desconozco? ¿Qué tipo de cosas debo perfilar / medir para determinar la optimización de mi solución?