Tengo una enorme cantidad de datos geográficos representados en la estructura de objeto simple que consiste solamente en estructuras. Todos mis campos son de tipo de valor.serialización rápida/deserialización de estructuras
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;
}
Los datos se chunked muy bien a pequeñas porciones de Parent[]
-s. Cada matriz contiene unas pocas instancias principales. Tengo demasiados datos para mantener todo en la memoria, así que tengo que intercambiar estos fragmentos en el disco de un lado a otro. (Un archivo resultaría aproximadamente 2-300KB).
¿Cuál sería la forma más eficiente de serializar/deserializar el Parent[]
en un byte[]
para volcar en el disco y leer de nuevo? Con respecto a la velocidad, Estoy particularmente interesado en la deserialización rápida, la velocidad de escritura no es tan crítica.
¿Sería simple BinarySerializer
lo suficientemente bueno? ¿O debería hackear con StructLayout
(see accepted answer)? No estoy seguro si eso funcionaría con el campo de matriz de Parent.children
.
ACTUALIZACIÓN: Respuesta a los comentarios - Sí, los objetos son inmutables (código actualizado) y, de hecho, el campo children
no es un tipo de valor. 300 KB no suena demasiado, pero tengo montones de archivos así, así que la velocidad sí importa.
_Todos mis campos son de valor type_ - El campo 'children' no es un tipo de valor. –
300 KB es una cantidad pequeña, esta cantidad se deserializa/serializa en 0,1s sin optimizaciones –
¿Son todos sus datos de solo lectura? – usr