HTTPListener与本机HTTP性能

时间:2010-12-15 23:07:08

标签: .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)
  • 我使用相同的托管客户端应用来测试两台服务器
  • For Managed我已禁用Nagle(但两种方式都测试,结果相同)
  • 我运行了一批测试并计算了吞吐量,有趣的是,Managed std偏差更高,即结果与原生相比不一致。

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

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

赞赏任何想法,

1 个答案:

答案 0 :(得分:1)

它使用Http.sys的事实并不意味着没有本机到托管的转换。从上面提到的MSDN文章:

  

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

由于你正在运行托管代码,你有interop(本地托管,不要与COM互操作混淆),你有垃圾收集等等。它永远不会像纯粹的本机一样快c ++实现。

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