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