Как в с# делать сериализацию / десериализацию list объекта размером 1gb максимально быстро?

Делаю сейчас десериализацию как

BinaryFormatter bin = new BinaryFormatter();
var test = (List<abc>)bin.Deserialize(stream);


Но это очень долго.

Как делать быстрее?
  • Вопрос задан
  • 3184 просмотра
Пригласить эксперта
Ответы на вопрос 3
@gleb_kudr
Так может лучше кусками, а куски потом просто склеить? Зачем весь список-то сразу? Тут явно проблема в постановке задачи.
Ответ написан
@AM5800
Зависит от того, что там у вас за объекты.
В определенных условиях можно существенно ускориться, если читать поток при помощи BinaryReader'а и руками создавать объекты.

Попробуйте, в общем.
Ответ написан
Комментировать
vipuhoff
@vipuhoff
накладные расходы у бинарной сериализации очень маленькие, если в общем то скорость загрузки подобного объекта равна скорости загрузки того же 1 Гб данных в оперативку, тут потеря идет не на алгоритме а на скорости работы HDD, я бы посоветовал разобрать задачу на части, не думаю что следует грузить весь список в память.
Нужно пересмотреть алгоритм, как вариант если в каждом объекте списка есть некий объект, который и занимает большую часть памяти его можно хранить отдельно, а в объекте при прописать его загрузку из файла при необходимости. Тогда сам список будет скорее всего мелким (логически можно предположить, что не больше 50 мб) а файлы будут по необходимости подгружаться.
Если же в объекте нет элемента который потребляет много памяти, но объектов списке настолько много, то следует использовать либо клиент серверную архитектуру, либо базу данных (sql к примеру).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы