Самый быстрый сериализатор и десериализатор с минимальным объемом памяти в С#?

В настоящее время я использую двоичный форматтер (Remoting) для сериализации и десериализации объектов для отправки по локальной сети.

Недавно я обновил с 2.0 до .NET 3.5. 3.5 представил новые типы для повышения производительности сериализации?

Ive посмотрел на DataContractSerializer, но это сериализует что-либо для основного XML-права..., что должно увеличить объем памяти.

Какой самый быстрый сериализатор для отправки объектов по локальной сети? Мне не нужна обстановка или управление версиями.... Мне нужна скорость!

Я открыт для сторонних альтернатив с открытым исходным кодом.

Ответы

Ответ 1

Похоже, что Буферы протоколов могут быть тем, что вы ищете.

Есть три реализации .NET, о которых я знаю: protobuf-net, protobuf-csharp-port и Proto #.

Сравнения производительности показывают, что протокольные буферы превосходят встроенные сериализаторы как по размеру, так и по скорости сериализации/десериализации.

Ответ 2

У меня есть некоторые тесты для ведущих сериализаторов .NET, доступные на основе набора данных Northwind.

@marcgravell binary protobuf-net - это самая быстрая реализация, сравниваемая с 7x, быстрее, чем доступный самый быстрый серийный анализатор Microsoft (XML DataContractSerializer) в BCL.

Microsoft JsonDataContractSerializer довольно медленный - более 9x медленнее, чем protobuf-net и более 3.6x медленнее, чем мой собственный JsonSerializer.

Ответ 3

В сравнение производительности, связанное с @Luke, обратите внимание, что DataContractJsonSerializer работает очень хорошо по сравнению с другими сериализаторами MS.

Учитывая вездесущность JSON и легкость использования которого вы можете использовать DataContractJsonSerializer, я не вижу большой причины использовать "буферы протокола". JSON будет легче отлаживать при переходе между языками и платформами, и он будет сжиматься красиво.

(Мне нравится, как Google использует концепции CS 101 и славится своей реализацией. В C мы называем "buffer buffer" "struct" s. Они отлично работают.)

Ответ 4

Как я продемонстрировал в этом ответе, сгенерированный код может быть самым быстрым сериализатором. Однако он находится на ранней стадии и по-прежнему не хватает нескольких функций, которые предлагают другие сериализаторы.