2010-12-15 14 views
9

クイックバックグラウンド: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を見ました。マーシャリングがあるようですが、目立つ問題はありません。実際にはチャンクを使用すると、ネイティブサーバーと同じチャンク配列が生成されます。

任意のアイデアが評価され、

+0

C++実装を構築したAPIは何ですか? –

+0

マネージドアプリケーションの標準偏差が大きいほど、ガベージコレクションが原因である可能性がありますか?たくさんのオブジェクトを作成/放棄していますか? –

+1

誰が 'HttpListener'クラスがHTTP.SYSを使用していると言ったのですか? IISは 'HttpListener'を実行するのではなく、実際には興味深いでしょう。そうだと思われる場合は、参照を提供してください。 – Aliostad

答えて

1

それはネイティブ・ツー・管理の移行がないことを意味するわけではないのHttp.sysを使用しているという事実。上記MSDN資料から:

HTTP.sysは、接続の管理、帯域幅の調整、およびWebサーバーのログを提供します。あなたは、マネージコードを実行している、あなたはなど、相互運用(管理へのネイティブ、COM相互運用機能と混同しないように)、あなたはガベージコレクションを持っているが、持っているという事実のおかげで

の速さであることを行ったことがないです純粋なネイティブC++実装です。

編集:これを明確にするために、.NETプロセスを実行しています。ユーザモードではなく、カーネルモードでIISにフックするだけです。これに関する素晴らしい記事は次のとおりです。http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp

関連する問題