Ho un enorme ammasso di dati geografici rappresentati nella struttura di un oggetto semplice costituita solo da strutture. Tutti i miei campi sono di tipo valore.Serializzazione veloce/deserializzazione delle strutture
public struct Child
{
readonly float X;
readonly float Y;
readonly int myField;
}
public struct Parent
{
readonly int id;
readonly int field1;
readonly int field2;
readonly Child[] children;
}
I dati vengono chunked piacevolmente a piccole porzioni di Parent[]
-s. Ogni array contiene alcune migliaia di istanze di Parent. Ho troppi dati per tenere tutto in memoria, quindi ho bisogno di scambiare questi pezzi su disco avanti e indietro. (Un file risulterebbe approssimativamente 2-300 KB).
Quale sarebbe il modo più efficiente di serializzare/deserializzare lo Parent[]
in un byte[]
per il dumpint su disco e la lettura? Per quanto riguarda la velocità, Sono particolarmente interessato alla deserializzazione rapida, la velocità di scrittura non è così importante.
Sarebbe semplice BinarySerializer
abbastanza buono? O dovrei hackerare con StructLayout
(see accepted answer)? Non sono sicuro che funzioni con il campo array di Parent.children
.
AGGIORNAMENTO: Risposta ai commenti - Sì, gli oggetti sono immutabili (codice aggiornato) e infatti il campo children
non è un tipo di valore. 300 KB suonano poco ma ho milioni di file come quello, quindi la velocità conta.
_Tutti i miei campi sono di tipo valore_ - Il campo 'figli 'non è un tipo di valore. –
300KB è una piccola quantità, questa quantità è deserializzata/serializzata in 0,1 s senza ottimizzazioni –
Tutti i tuoi dati sono di sola lettura? – usr