Какой метод наиболее эффективен при перемещении объектов по проводам в .NET? - PullRequest
15 голосов
/ 27 июня 2011

Я использовал WebServices для перемещения данных по проводам, и это мне очень помогло. Превосходно при отправке небольших фрагментов данных. Как только вам нужно переместить деревья глубоких объектов с множеством свойств, получающийся в результате XML-суп берет 100 КБ данных и превращает их в 1 МБ.

Итак, я попробовал IIS Compression , но это оставило меня в восторге. Он хорошо сжимал данные, но компромисс был в сжатии / распаковке. Затем я сериализовал объекты через BinaryFormatter и отправил их через. Это было лучше, однако скорость кодирования / декодирования все еще остается.

Во всяком случае, я слышал, что я застрял в 00, и теперь есть более эффективные способы передачи данных по проводам, такие как ProtocolBuffers, MessagePack и т. Д ...

Может кто-нибудь сказать мне, будут ли эти новые протоколы лучше подходить для отправки больших кусков данных, и мне не хватает других эффективных способов сделать это?

Под эффективностью я подразумеваю величину полосы пропускания, скорость кодирования / декодирования, скорость реализации и т. Д. *

Ответы [ 4 ]

11 голосов
/ 27 июня 2011

Это зависит от того, что составляет большую часть ваших данных. Если у вас есть только несколько объектов с несколькими полями, и это действительно «расширение», которое их «расширяет», то другие форматы, такие как буфер протокола, могут иметь огромное значение. Я не использовал MessagePack или Thrift, но я ожидаю, что они могут иметь примерно одинаковый прирост размера.

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

6 голосов
/ 27 июня 2011

Это в значительной степени зависит от того, где находятся ваши приоритеты и какой тип клиента вы используете.

WCF предоставляет несколько отличных способов передачи данных по сети, в том числе множество вариантов связывания а также довольно эффективные сериализаторы, такие как DataContractSerializer .При этом для многих из этих вещей требуется «богатый» клиент, который также использует WCF.

Если это не вариант, то что-то вроде Protocol Buffers может быть очень хорошим подходом.Это обеспечивает очень быструю сериализацию / десериализацию, а также приемлемый размер передачи для большинства данных.

2 голосов
/ 27 июня 2011

Вы проверили Protobuf-net ??

1 голос
/ 28 июня 2011

Использование библиотеки Саймона Хьюитта (написано на C #) для выполнения сериализации является эффективным с точки зрения пропускной способности и скорости кодирования / декодирования.Библиотека распространяется в виде исходного кода на C #.

Единственная проблема заключается в том, чтобы избежать включения сериализации .NET - для структур данных, не поддерживаемых библиотекой, необходимо явно указать кодировку в коде клиента, чтобы избежать сериализации .NET вбыть призван.Это влияет на скорость реализации, но я получил улучшение в 2-3 раза по размеру и в 20-40 раз за время, затрачиваемое на сериализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...