Sto lavorando su un'applicazione .NET 4.0, che esegue un calcolo piuttosto costoso su due doppie restituendo una doppia. Questo calcolo viene eseguito per ciascuna delle diverse migliaia di articoli . Questi calcoli vengono eseguiti in un Task
thread threadpool.
Alcuni test preliminari hanno dimostrato che gli stessi calcoli vengono eseguiti più e più volte, quindi vorrei memorizzare nella cache n risultati. Quando la cache è piena, vorrei buttare via il meno- spesso oggetto utilizzato di recente. ( Modifica: mi sono reso conto meno spesso che non ha senso, perché quando la cache è piena e sostituivo un risultato con uno appena calcolato, quello sarebbe usato meno spesso e immediatamente sostituito la prossima volta che verrà calcolato un nuovo risultato e aggiunto alla cache)
Per implementare questo, stavo pensando di usare un Dictionary<Input, double>
(dove Input
sarebbe una mini-classe che memorizza i due valori di input doppio) per memorizzare gli input e i risultati memorizzati nella cache. Tuttavia, avrei anche bisogno di tenere traccia di quando è stato utilizzato un risultato l'ultima volta. Per questo penso che avrei bisogno di una seconda raccolta che memorizzi le informazioni di cui avrei bisogno per rimuovere un risultato dal dittonario quando la cache si stava riempiendo. Sono preoccupato che mantenere costantemente ordinato questo elenco avrebbe un impatto negativo sulle prestazioni.
Esiste un modo migliore (ovvero più performante) per farlo, o forse anche una struttura di dati comune di cui non sono a conoscenza? Che tipo di cose dovrei profilare / misurare per determinare l'ottimalità della mia soluzione?