クイックバックグラウンド:HTTPListenerはhttp.sysカーネルドライバを使用していると思います。しかし、管理されたhttpサーバとネイティブvC++サーバの間でいくつかのパフォーマンスベンチマークを行うと、ネイティブ側で約15 MB/sの増加が見られます。テストセットアップは、新しく1GBのnicでフォーマットされた2つのラボマシンです。ネイティブ側では、HTTPListenerを使用すると約94 MB/s(最大100)が表示されているので、約110 MB/sのオーバーヘッドを100%に近づけています。HTTPListenerとネイティブHTTPのパフォーマンス
テストはリンゴにリンゴです、
- 両方が私を無効にしている私が管理のために、両方のサーバ
- をテストするために、同じ管理対象クライアントアプリを使用しています同じペイロード(〜120メガバイト)
- を送信します
- 私はテストのバッチを実行し、スループットを計算します。面白いのは、管理された標準偏差が高いことです。つまり、結果はネイティブと比較して一貫性がありません。
全体的に私は、HTTPListener経由でネイティブサーバーの110 MB/sに近づくことができるはずですが、15 MB /秒は非常に高価です。
質問: 1.私は行方不明の管理の他の最適化はありますか? 2.潜在的なボトルネックは何ですか、私はリフレクターを介してHTTPResponseStreamを見ました。マーシャリングがあるようですが、目立つ問題はありません。実際にはチャンクを使用すると、ネイティブサーバーと同じチャンク配列が生成されます。
任意のアイデアが評価され、
C++実装を構築したAPIは何ですか? –
マネージドアプリケーションの標準偏差が大きいほど、ガベージコレクションが原因である可能性がありますか?たくさんのオブジェクトを作成/放棄していますか? –
誰が 'HttpListener'クラスがHTTP.SYSを使用していると言ったのですか? IISは 'HttpListener'を実行するのではなく、実際には興味深いでしょう。そうだと思われる場合は、参照を提供してください。 – Aliostad