Estou trabalhando em um aplicativo .NET 4.0, que executa um cálculo bastante caro em duas duplas retornando uma dupla. Este cálculo é realizado para cada um dos vários milhares de itens . Esses cálculos são realizados em um Task
encadeamento em um conjunto de encadeamentos.
Alguns testes preliminares mostraram que os mesmos cálculos são realizados repetidamente, então eu gostaria de armazenar n resultados em cache . Quando o cache está cheio, eu gostaria de jogar fora os menos frequentemente artigo recentemente utilizado. ( Editar: percebi que com menos frequência não faz sentido, porque quando o cache está cheio e eu substituía um resultado por um recém-calculado, esse seria menos usado e substituído imediatamente na próxima vez que um novo resultado fosse calculado e adicionado ao cache)
Para implementar isso, eu estava pensando em usar um Dictionary<Input, double>
(onde Input
seria uma mini-classe armazenando os dois valores duplos de entrada) para armazenar as entradas e os resultados armazenados em cache. No entanto, eu também precisaria acompanhar quando um resultado foi usado pela última vez. Para isso, acho que precisaria de uma segunda coleção para armazenar as informações necessárias para remover um resultado do dictonário quando o cache estivesse ficando cheio. Preocupa-me que a manutenção constante dessa lista tenha um impacto negativo no desempenho.
Existe uma maneira melhor (ou seja, mais eficiente) de fazer isso, ou talvez até uma estrutura de dados comum que eu desconheça? Que tipos de coisas devo analisar / medir para determinar a otimização da minha solução?