Nella mia applicazione io uso un dizionario (che supporta l'aggiunta, la rimozione, l'aggiornamento e la ricerca) dove entrambe le chiavi e i valori sono o possono essere resi serializzabili (i valori possono essere abbastanza grafici ad oggetti di grandi dimensioni). Sono arrivato a un punto in cui il dizionario è diventato così grande che tenerlo completamente in memoria ha iniziato a scatenare occasionalmente OutOfMemoryException
(a volte nei metodi del dizionario, e talvolta in altre parti del codice).Un dizionario in grado di salvare i suoi elementi accessibili meno spesso su un disco
Dopo un tentativo di sostituire completamente il dizionario con un database, le prestazioni sono scese a un livello inaccettabile.
L'analisi dei modelli di utilizzo del dizionario ha mostrato che di solito una parte più piccola dei valori è "calda" (si accede abbastanza spesso) e il resto (una parte più grande) è "freddo" (accesso raramente o mai). È difficile dire quando viene aggiunto un nuovo valore se sarà caldo o freddo, inoltre, alcuni valori possono migrare avanti e indietro tra le parti calde e fredde nel tempo.
Penso di aver bisogno di un'implementazione di un dizionario in grado di scaricare i suoi valori a freddo su un disco in un evento di memoria insufficiente, quindi ricaricarli alcuni su richiesta e tenerli in memoria fino al prossimo evento di memoria insufficiente si verifica quando il loro stato caldo/freddo sarà rivalutato. Idealmente, l'implementazione dovrebbe regolare in modo ordinato le dimensioni delle parti calde e fredde e l'intervallo di risciacquo in base al profilo di utilizzo della memoria nell'applicazione per massimizzare le prestazioni complessive. Poiché nell'applicazione esistono diverse istanze di un dizionario (con diversi tipi di chiavi/valori), penso che potrebbero aver bisogno di coordinare i loro flussi di lavoro.
Potrebbe suggerire come implementare un tale dizionario?
Hai mai pensato di aggiungere cache all'approccio db? Penso che la cache standard con scadenza scorrevole possa migliorare le prestazioni. – empi