Sto cercando un modo per memorizzare una grande quantità di valori di dati individuali, con i seguenti vincoli.
- Supponiamo che i tipi siano bool, int32, double, decimal, string e blob (array di byte).
- Il tipo di ciascun valore non sarà noto al momento della compilazione (ma l'insieme di possibili tipi è).
- Il tipo di ciascun valore sarà noto in fase di esecuzione, quindi non bisogno di per conoscere il proprio tipo.
- Ce ne sono molti - pensa almeno a milioni.
- I valori vengono raccolti in righe / buste di (diciamo) valori 1-100 e accessibili per indice (da un dizionario come accade).
- I valori vengono creati e distrutti a volte, letti spesso e aggiornati raramente.
Le strategie che ho finora sono solo queste:
- Matrice di oggetti, ma richiederebbe che i tipi di valore siano racchiusi in una scatola e questo è un carico sul GC che preferirei evitare.
- Serializza su un flusso di byte. String e blob richiederebbero una lunghezza incorporata. Il costo di lettura / aggiornamento è elevato.
In C ++ questa potrebbe essere una matrice di unione di tipi di puntatori e scalari, ma tale strategia non è disponibile (o almeno molto pericolosa) in .NET. Questo è un luogo in cui davvero non ho bisogno di un GC (la distruzione degli oggetti è deterministica), quindi chiamare fuori codice non gestito è una possibilità.
La domanda è se mi sono perso strategie praticabili nel mondo .NET. Suggerimenti / commenti benvenuti.
Per la mia particolare applicazione sembra che la creazione / cancellazione avvenga in lotti (righe / sacchetti / serie) e che i singoli valori non vengano aggiunti o cancellati. Pensa a serializzazione / deserializzazione piuttosto che a un accesso casuale. Ci sono anche operazioni impostate, quindi value-compare-equals è un'operazione comune e la boxe non è buona.