Je travaille sur une application .NET 4.0, qui effectue un calcul assez cher sur deux doubles retournant un double. Ce calcul est effectué pour chacun de plusieurs milliers d' articles . Ces calculs sont effectués dans un Task
sur un thread threadpool.
Certains tests préliminaires ont montré que les mêmes calculs sont effectués encore et encore, donc je voudrais mettre en cache n résultats. Lorsque le cache est plein, je voudrais jeter l' élément le moins souvent utilisé récemment. ( Edit: je me suis rendu compte que le moins souvent n'a pas de sens, car lorsque le cache est plein et que je remplacerais un résultat par un nouveau calculé, celui-ci serait le moins souvent utilisé et immédiatement remplacé la prochaine fois qu'un nouveau résultat est calculé et ajouté au cache)
Afin de mettre en œuvre cela, je pensais à utiliser un Dictionary<Input, double>
(où Input
serait une mini-classe stockant les deux valeurs doubles d'entrée) pour stocker les entrées et les résultats mis en cache. Cependant, je devrais également garder une trace du moment où un résultat a été utilisé la dernière fois. Pour cela, je pense que j'aurais besoin d'une deuxième collection stockant les informations dont j'avais besoin pour supprimer un résultat du dicton lorsque le cache était plein. Je crains que le fait de conserver constamment cette liste triée ait un impact négatif sur les performances.
Y a-t-il une meilleure façon (c'est-à-dire plus performante) de faire cela, ou peut-être même une structure de données commune que je ne connais pas? Quels types de choses dois-je profiler / mesurer pour déterminer l'optimalité de ma solution?