У меня огромный размер географических данных, представленных в простой структуре объектов, состоящей только из структур. Все мои поля имеют тип значения.
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 КБ звучит не так много, но у меня есть такие файлы, как скорость, поэтому скорость имеет значение.