У меня была очень похожая проблема - сохранение в файл. Но следующее может также использоваться по сети, так как оно действительно было разработано для удаленного взаимодействия.
Решение состоит в том, чтобы использовать библиотеку Саймона Хьюитта - см. Оптимизация
Сериализация в .NET - часть 2 .
Часть 1 статьи гласит (жирным шрифтом является мой акцент):
«... Если вы когда-либо использовали удаленное взаимодействие .NET для больших объемов
данные, вы обнаружите, что есть проблемы с
масштабируемость. Для небольших объемов данных это работает хорошо
достаточно, но большие объемы занимают много процессора и памяти,
генерирует большие объемы данных для передачи , и
может произойти сбой с исключениями Out Of Memory. Существует также большая
проблема со временем, необходимым для фактического выполнения
сериализация - большие объемы данных могут сделать это невозможным
для использования в приложениях .... "
Я получил аналогичный результат для моего конкретного приложения, 40
в разы быстрее экономит и в 20 раз быстрее загружает
минут до секунд). Размер сериализованных данных был
также сильно снижается. Я точно не помню, но это
был хотя бы 2-3 раза.
Начать довольно легко. Однако есть один
Гоча: используйте только сериализацию .NET для самых высоких
структура данных уровня (для получения сериализации / десериализации
начал), а затем вызвать сериализацию / десериализацию
работает непосредственно для полей на самом высоком уровне
структура данных. Иначе не будет никакого ускорения ...
Например, если конкретная структура данных (скажем,
Generic.List
) библиотека не поддерживается тогда .NET
вместо этого будет использоваться сериализация, и это нет-нет. Вместо
сериализовать список в коде клиента (или подобном). Для примера
см. рядом «Это наша собственная кодировка». в той же функции
как указано ниже.
Для справки: код из моего приложения - см. Рядом «Примечание: это единственное место, где мы используем встроенный .NET ...».