Ho bisogno di eseguire le operazioni in ordine cronologico su enormi serie temporali implementate come IList. I dati vengono infine archiviati in un database, ma non avrebbe senso inviare decine di milioni di query al database.Implementazione IList di file mappati in memoria, per la memorizzazione di serie di dati di grandi dimensioni "in memoria"?
Attualmente IList in memoria attiva un'eccezione OutOfMemory quando si tenta di archiviare più di 8 milioni (piccoli) oggetti, anche se dovrei occuparmi di decine di milioni.
Dopo alcune ricerche, sembra che il modo migliore per farlo sarebbe quello di memorizzare i dati su disco e accedervi tramite un wrapper IList.
Memory-mapped files (introdotto in .NET 4.0) sembra l'interfaccia corretta da utilizzare, ma mi chiedo quale sia il modo migliore per scrivere una classe che dovrebbe implementare IList (per un facile accesso) e gestire internamente un file mappato in memoria.
Sono anche curioso di sapere se conosci altri modi! Ho pensato ad esempio a un wrapper IList che utilizzava dati da db4o (someone mentionned here usando un file mappato in memoria come IoAdapterFile, sebbene l'uso di db4o probabilmente aggiunga un costo delle prestazioni rispetto a quello diretto con il file mappato in memoria).
Mi sono imbattuto nel this question chiesto nel 2009, ma non ha prodotto risposte utili o idee serie.
sono le operazioni che esegui in sequenza? o stai operando sull'intero dato tutto in una volta? – Yahia
L'accesso deve essere sequenziale (iterando sulla raccolta per eseguire un aggiornamento) e devo anche essere in grado di eliminare/rimuovere oggetti all'estremità. –
Un database è lo strumento giusto per questo lavoro. Aggiorna i dati in batch per evitare troppe chiamate al database. Potresti anche essere interessato all'elaborazione dello stile per ridurre le mappe per accelerare un po 'le cose. – dtb