У меня огромный размер географических данных, представленных в простой структуре объектов, состоящей только из структур. Все мои поля имеют тип значения.
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. Каждый массив содержит несколько тысяч родительских экземпляров. У меня слишком много данных, чтобы хранить все в памяти, поэтому мне нужно поменять эти куски на диск взад и вперед. (Один файл будет составлять примерно 2-300 КБ).
Каким будет наиболее эффективный способ сериализации/десериализации Parent[] в byte[] для dumpint на диск и чтения? Что касается скорости, Меня особенно интересует быстрая десериализация, скорость записи не является критичной.
Было бы просто BinarySerializer достаточно хорошо?
Или я должен взломать StructLayout (см. Принятый ответ)? Я не уверен, что это будет работать с полем массива Parent.children.
UPDATE: ответ на комментарии. Да, объекты неизменяемы (код обновлен), и действительно, поле children не является типом значения. 300 КБ звучит не так много, но у меня есть такие файлы, как скорость, поэтому скорость имеет значение.