.net HTTPListener与本机HTTP性能
快速背景:我知道HTTPListener使用http.sys内核驱动程序,这可能使它成为一个出色的执行者。然而,当在托管http服务器和本机vc++服务器之间进行一些性能基准测试时,我发现本机端大约增加了15 MB/s。测试设置是两台新格式化为1gb NIC的实验室机器。在本机端,我看到大约110 MB/s,这接近nic减去开销后的100%,当使用HTTPListener时,我看到大约94 MB/s(最大100) 测试是苹果对苹果的.net HTTPListener与本机HTTP性能,.net,performance,httplistener,.net,Performance,Httplistener,快速背景:我知道HTTPListener使用http.sys内核驱动程序,这可能使它成为一个出色的执行者。然而,当在托管http服务器和本机vc++服务器之间进行一些性能基准测试时,我发现本机端大约增加了15 MB/s。测试设置是两台新格式化为1gb NIC的实验室机器。在本机端,我看到大约110 MB/s,这接近nic减去开销后的100%,当使用HTTPListener时,我看到大约94 MB/s(最大100) 测试是苹果对苹果的 两者都发送相同的有效负载(~120 mb) 我使用同一个托管
- 两者都发送相同的有效负载(~120 mb)
- 我使用同一个托管客户端应用程序测试两台服务器
- 对于Managed,我已禁用Nagle(但通过两种方式进行测试,结果相同)
- 我运行了一批测试并计算了吞吐量,有趣的是,管理的std偏差更高,即结果与本机结果不一致李>
任何想法都值得赞赏,它使用Http.sys并不意味着没有本机到托管的转换。从上述MSDN文章中: HTTP.sys提供连接管理、带宽限制和Web服务器日志记录
由于您运行托管代码,您拥有互操作(原生的托管,不与COM互操作混淆),您有垃圾收集等。它永远不会像纯本地C++实现一样快。
编辑:为了更清楚地说明这一点,您仍然在运行一个.NET进程,您只是在内核模式下连接到IIS,而不是在用户模式下。这篇文章的主要内容是:你在C++上实现了什么API?托管应用程序的更高的STD偏差可能是由于垃圾收集引起的?您正在创建/放弃很多对象吗?谁说
HttpListener
class使用HTTP.SYS??IIS没有,但HttpListener没有,事实上,如果有,它会很有趣。因此,如果您认为有,请提供参考。请参阅-“HttpListener类构建在HTTP.sys之上,HTTP.sys是处理Windows所有HTTP通信的内核模式侦听器。HTTP.sys提供连接管理、带宽调节和Web服务器日志记录。”@Mitch Wheat,我正在重用相同的缓冲区以避免任何不必要的GC,而且我运行在一台32GB的机器上,因此触发GC的内存压力应该很小。