1

最近、SslStream の使用方法に関するパフォーマンスの問題をデバッグしました。

クライアントは C#/.NET で、次のストリーム構成がありました

  • Raw ソケット/NetStream
  • BufferedStream でラップ
  • SslStream によるラップ
  • 「プロトコル」ストリーム(バイト/整数/文字列などを送信する)によってラップされます

クライアント側で情報をシリアル化するのに長い時間がかかっていたインターネット経由で、クライアントからサーバーにデータを送信するときに、パフォーマンスが非常に遅くなっていました。

SSL ストリームを削除すると、接続が予想されるレベルまで高速化されました。

次に、上記のストリーム構成を次のように変更しました。

  • Raw ソケット/NetStream
  • SslStream によるラップ
  • BufferedStream でラップ <-- これを移動
  • 「プロトコル」ストリーム(バイト/整数/文字列などを送信する)によってラップされます

また、接続は予想されるレベルまで高速化されました。

ストリーム構成を変更するとパフォーマンスが大幅に向上する理由を誰か説明できますか?特に、サーバーと同じマシン上のクライアントで元の構成を非常に高速にテストしたので?

4

1 に答える 1

7

理由は簡単です。int (わずか 4 バイト) を保存すると、SSL パケットにラップされてからバッファリングされます。順序を変更した後、バッファーに大量のデータを収集し始め、それを SSL で 1 つの大きなブロックとしてラップしました。SSL ラッパーが少なく、高速です。

于 2013-02-19T19:18:36.337 に答える