Sto lavorando su un'applicazione .NET 4.0, che esegue un calcolo piuttosto costoso su due doppi che restituiscono un doppio. Questo calcolo viene eseguito per ognuna delle diverse migliaia di elementi . Questi calcoli vengono eseguiti in Task
su un thread del threadpool.
Alcuni test preliminari hanno dimostrato che gli stessi calcoli vengono eseguiti più e più volte, quindi mi piacerebbe memorizzare i risultati n . Quando la cache è piena, vorrei buttare fuori l'oggetto meno usato spesso usato di recente. ( Modifica: mi sono reso conto che meno spesso non ha senso, perché quando la cache è piena e sostituirò un risultato con uno appena calcolato, quello sarebbe meno utilizzato e immediatamente sostituito la prossima volta viene 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 doppi di input) per memorizzare gli input ei risultati memorizzati nella cache. Tuttavia, dovrei anche tenere traccia di quando un risultato è stato utilizzato l'ultima volta. Per questo penso che avrei bisogno di una seconda raccolta che memorizza le informazioni di cui avrei bisogno per rimuovere un risultato dal dictonary quando la cache si stava riempendo. Sono preoccupato che tenere costantemente in ordine questo elenco influirebbe negativamente sulle prestazioni.
C'è un modo migliore (cioè 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?