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