C#でメモリフットプリントが最小の最速のシリアライザーとデシリアライザー?
質問
現在、バイナリフォーマッタ(リモート処理)を使用して、LAN経由で送信するオブジェクトをシリアル化および逆シリアル化します。
最近2.0から.NET 3.5にアップグレードしました。 3.5では、シリアル化のパフォーマンスを向上させる新しいタイプが導入されていますか?
I’ DataContractSerializer
を確認しましたが、これにより、基になるXMLの権利にすべてがシリアル化されます…メモリフットプリントを増やす必要があります。
LAN経由でオブジェクトを送信するための最速のシリアライザーは何ですか?相互運用やバージョン管理については気にしません…。スピードが必要です!
サードパーティのオープンソースの選択肢を受け入れています。
解決
プロトコルバッファが探しているようです。
>私が知っている3つの.NET実装があります: protobuf-net 、 protobuf-csharp-port および Proto#。
パフォーマンスの比較は、プロトコルバッファが組み込みよりも優れていることを示していますサイズとシリアライゼーション/デシリアライゼーションの速度の両方の観点からシリアライザ。
他のヒント
いくつかの主要な.NETのベンチマークがありますNorthwindデータセットに基づいて使用可能なシリアライザー。
@marcgravellバイナリprotobuf-netは、BCLで利用可能なMicrosoft最速のシリアライザー(XML DataContractSerializer)よりも約 7x 速いベンチマークで最速の実装です。
MicrosoftのJsonDataContractSerializerはかなり遅いです-protobuf-netよりも 9x より遅く、自分の
@Lukeによってリンクされたパフォーマンス比較で、 DataContractJsonSerializer
は、他のMSシリアライザーと比較して非常に優れたパフォーマンスを発揮します。
JSONの普遍性と、 DataContractJsonSerializer
の使いやすさを考えると、「プロトコルバッファ」を使用する理由はあまりありません。 JSONは、言語とプラットフォームを切り替えるときにデバッグが容易になり、美しく圧縮されます。
(GoogleがCS 101の概念を取り入れ、それらを実装することで有名になった方法が大好きです。Cでは、「プロトコルバッファ」と「構造体」を呼び出します。それらは素晴らしい働きをします。)
この回答で示したように、生成されたコードは最速のシリアライザーかもしれません。ただし、初期段階であり、他のシリアライザーが提供するいくつかの機能がまだありません。