Rapide de sérialisation/désérialisation des structs

J'ai d'énormes amont de données géographiques représentées dans simple la structure de l'objet composé uniquement des structures. Tous mes champs sont de type valeur.

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;
}

Les données sont découpées en place bien à de petites portions de Parent[]-s. Chaque tableau contient quelques milliers Parent instances. J'ai beaucoup trop de données pour garder tout en mémoire, donc j'ai besoin de swap de ces morceaux sur le disque d'avant en arrière. (Un fichier de résultat env. 2-300 KO).

Quel serait le moyen le plus efficace de la sérialisation/désérialisation du Parent[] à un byte[] pour dumpint à disque et de la lecture? Concernant la vitesse, je suis particulièrement intéressé par rapide de la désérialisation, la vitesse d'écriture n'est pas que critique.

Serait simple BinarySerializer assez bon?
Ou devrais-je pirater autour avec StructLayout (voir accepté de répondre)? Je ne suis pas sûr si cela fonctionnerait avec le tableau champ de Parent.children.

Mise à JOUR: Réponse aux commentaires - Oui, les objets sont immuables (code mis à jour) et en effet le children champ n'est pas le type de valeur. 300KB ne semble pas beaucoup, mais j'ai des milliards de fichiers comme ça, si la vitesse est importante.

Tous mes champs sont de type valeur - Le children champ n'est pas un type de valeur.
300KB est en petite quantité, ce montant est désérialisé/sérialisé en 0,1 s w/o optimisations
Est toutes vos données en lecture seule?
Le binaire sérialiseur est très lent. Il utilise la réflexion pour injecter des métadonnées dans la sérialisation des données. Car il ne fournit pas de type de métadonnées, XML sérialiseur sérialise les données dans un format plus petit et plus rapide format que le binaire sérialiseur. Dans les deux cas, la sérialisation est faite par l'intermédiaire de la réflexion et est très lent. Un de mes brillants collègues créé un mécanisme de sérialisation binaire qui est 20 fois plus rapide que le sérialiseur XML, qui a été plus rapide que le binaire sérialiseur. Il a été aussi considérablement plus petites.

OriginalL'auteur user256890 | 2012-03-30