Мы начинаем развертывать все больше развертываний WAN нашего продукта (.NET-клиент с хостингом IIS Remoting backend). Из-за этого мы пытаемся уменьшить размер данных на проводе.Оптимальная сериализация примитивных типов
Мы переопределили сериализацию по умолчанию, реализовав ISerializable (аналогично this), и мы видим от 12% до 50% прибыли. Большинство наших усилий сосредоточено на оптимизации массивов примитивных типов. Есть ли причудливый способ сериализации примитивных типов, помимо очевидных?
К примеру, сегодня мы сериализовать массив целых чисел следующим образом:
[4 байта (длина массива)] [4-байт] [4-байт]
Может кто-то делает значительно лучше?
Наиболее очевидным примером значительного улучшения для булевых массивов является размещение 8 балов в каждом байте, что мы уже делаем.
Примечание: Сохранение 7 бит на bool может показаться пустой тратой времени, но когда вы имеете дело с большими величинами данных (что мы и есть), оно складывается очень быстро.
Примечание: Мы хотим избежать общих алгоритмов сжатия из-за связанной с ним задержки. Remoting поддерживает только буферизованные запросы/ответы (без кодировки). Я понимаю, что между сжатием и оптимальной сериализацией существует тонкая грань, но наши тесты показывают, что мы можем позволить себе очень специфическую оптимизацию сериализации при очень низкой стоимости задержек. В то время как переработка всего буферизованного ответа в новый сжатый буфер слишком дорога.
(обратите внимание, что я ответил на ваш комментарий/вопрос) –