HTTPListener与本机HTTP性能

Joe*_*ino 9 .net performance httplistener

快速背景:我知道HTTPListener使用http.sys内核驱动程序,据说这使它成为一个伟大的执行者.但是,在托管的http服务器和本机vc ++服务器之间进行一些性能基准测试时,我看到本机端增加了大约15 MB/s.测试设置是两个实验室机器,新格式化为1gb nics.在本机方面,我看到大约110 MB/s,接近100%的nic减去开销,当使用HTTPListener时,我看到~94 MB/s(最大100).

测试是苹果到苹果,

  • 两者都发送相同的有效载荷(~120 mb)
  • 我使用相同的托管客户端应用程序来测试两个服务器
  • 对于托管我已禁用Nagle(但两种方式都测试过,结果是一样的)
  • 我运行了一批测试并计算了吞吐量,有趣的是,Managed std偏差更高,即结果与本机相比不一致.

总的来说,我希望我能够通过HTTPListener接近110 MB/s的本机服务器,15 MB/s似乎相当昂贵.

问题:1.我缺少其他针对托管的优化吗?2.有什么潜在的瓶颈,我通过反射器查看HTTPResponseStream,看起来有一些编组正在进行,但没有明显的问题,事实上当使用分块时,它产生与我的本机服务器相同的块数组.

任何想法都赞赏,

Chr*_*ain 1

它使用 Http.sys 的事实并不意味着不存在本机到托管的转换。来自上述MSDN文章:

HTTP.sys 提供连接管理、带宽限制和 Web 服务器日志记录。

由于您正在运行托管代码,因此您具有互操作(本机到托管,不要与 COM 互操作混淆),您具有垃圾收集等。它永远不会像纯本机 C++ 实现那么快。

编辑:为了更清楚地说明这一点,您仍在运行 .NET 进程,您只是在内核模式下挂接到 IIS,而不是在用户模式下。关于此的一篇很棒的文章在这里:http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp