3

XML over TCP/IP をクライアントからサーバーに送信し、他のクライアントにブロードキャストするクライアント サーバー アプリケーションがあります。通常のストリームを介して送信するのではなく、XML を圧縮することによってパフォーマンスの向上を保証する XML の最小サイズを知るにはどうすればよいですか。

これまたは例に関する良い指標はありますか?

4

5 に答える 5

2

Xml は繰り返しが多い傾向があるため、通常は非常によく圧縮されます。

別のオプションは、バイナリ形式に切り替えることです。BinaryFormatter または NetDataContractSerializer は単純なオプションですが、どちらも xml と比較して (たとえば Java と) 互換性がないことで有名です。

もう 1 つのオプションは、Google の「プロトコル バッファ」などの移植可能なバイナリ形式です。私はこれの .NET/C# バージョンをprotobuf-netと呼んで維持しています。これは、通常の .NET アプローチ (XmlSerializer / DataContractSerializer など) とサイドバイサイドで互換性があるように設計されていますが、xml よりもはるかに小さく、シリアル化と逆シリアル化の両方に必要な処理 (CPU など) が大幅に少なくなります。

このページには、XmlSerializer、DataContractSerializer、および protobuf-net の数値が表示されます。圧縮あり/なしの統計が含まれていると思っていましたが、それらは消えているようです...

[更新] 私が言うべきだった - QuickStart プロジェクトに TCP/IP の例があります。

于 2008-10-25T15:15:30.927 に答える
1

緩いメトリックは、1 つのパケットよりも大きなものを圧縮することですが、それはつまらないものです。

アプリケーションの内部でバイナリ形式を使用することを控える理由はありません。圧縮にどれだけ時間がかかっても、ネットワークのオーバーヘッドは圧縮よりも数桁遅くなります (非常に遅いデバイスについて話している場合を除きます)。

これらの 2 つの提案に満足できない場合は、いつでもベンチマークを行って、圧縮する場所を見つけることができます。

于 2008-10-25T14:57:47.773 に答える
0

圧縮があなたにとってメリットがあるかどうかを判断するには、実際の量または予想される種類のデータがシステムを通過すると予想される量を使用して、いくつかのテストを実行する必要があります。

お役に立てれば。

于 2008-10-25T14:56:03.173 に答える
0

私たちが行ったテストでは、大きな利点が見つかりましたが、CPU への影響に注意してください。

私が取り組んだあるプロジェクトでは、大量の XML データ (> 10 メガバイト) を .NET を実行しているクライアントに送信していました。XML ファイルが十分に大きくなると、Microsoft XML ライブラリが XML ファイルを解析できなくなることがわかりました (マシンが使い果たされました)。 1 ギガを超えるマシンでも)。XML 解析ライブラリを変更することで最終的には改善されましたが、その前に、転送したデータの GZIP 圧縮を有効にして、大きなドキュメントの解析に役立てました。2 つの Linux ベースの Websphere サーバーで、XML を生成し、かなり簡単に gzip することができました。50 人のユーザーが同時にこれを実行している場合 (これらのファイルを約 10 から 20 ロード)、約 50% の CPU で問題なく実行できたと思います。XML の圧縮は、.net GUI よりもサーバーの方が処理 (解析/CPU 時間) が優れているように見えましたが、これはおそらく、使用されている Microsoft XML ライブラリの上記の不備によるものです。前述したように、より高速でメモリ使用量の少ない優れたライブラリが利用可能です。

私たちの場合、サイズも大幅に改善されました。50 MB の XML ファイルを、場合によっては約 10 MB まで圧縮していました。これは明らかにネットワーク パフォーマンスにも役立ちました。

私たちはその影響と、これが他の結果をもたらすかどうかを懸念していたので (私たちのユーザーは大きな波で物事を行っているようだったので、CPU が不足するのではないかと心配していました)、gzip を有効にするために使用できる構成変数がありました。オンオフ。これも行うことをお勧めします。

もう 1 つ、XML ファイルをデータベースに永続化する前に zip 圧縮したことで、約 50% のスペースを節約できました (XML ファイルは数 K から数メガの範囲ですが、ほとんどがかなり小さいものです)。圧縮を使用するかどうかを区別するために特定のレベルを選択するよりも、おそらくすべてを行う方が簡単です。

于 2008-10-25T16:52:55.553 に答える
0

必ず圧縮してください。

2 つ以上のタグを使用すると、帯域幅を節約できます。

于 2008-10-25T14:42:32.800 に答える