Быстрая сериализация/десериализация структур

У меня есть огромное количество географических данных, представленных в простой объектной структуре, состоящей только из структур. Все мои поля имеют тип значения.

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

Данные хорошо разбиты на небольшие части Parent[]-s. Каждый массив содержит несколько тысяч экземпляров Parent. У меня слишком много данных, чтобы хранить все в памяти, поэтому мне нужно перекачивать эти фрагменты на диск туда и обратно. (Один файл будет весить примерно 2-300 КБ).

Какой самый эффективный способ сериализации/десериализации Parent[]в byte[]для сброса на диск и обратного чтения? Что касается скорости, меня особенно интересует быстрая десериализация, скорость записи не так критична.

Будет ли достаточно простого BinarySerializer? Или я должен взломатьStructLayout (см. принятый ответ) ? Я не уверен, что это будет работать с полем массива Parent.children.

ОБНОВЛЕНИЕ: Ответ на комментарии. Да, объекты неизменяемы (код обновлен), и действительно, поле childrenне является типом значения. 300 КБ звучит немного, но у меня миллионы таких файлов, так что скорость имеет значение.

11
задан Community 23 May 2017 в 12:01
поделиться