Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net HTTPListener与本机HTTP性能_.net_Performance_Httplistener - Fatal编程技术网

.net HTTPListener与本机HTTP性能

.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) 我使用同一个托管

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

测试是苹果对苹果的

  • 两者都发送相同的有效负载(~120 mb)
  • 我使用同一个托管客户端应用程序测试两台服务器
  • 对于Managed,我已禁用Nagle(但通过两种方式进行测试,结果相同)
  • 我运行了一批测试并计算了吞吐量,有趣的是,管理的std偏差更高,即结果与本机结果不一致
总的来说,我希望通过HTTPListener可以接近本机服务器的110MB/s,15MB/s似乎相当昂贵

问题: 1.是否有我遗漏的其他托管优化? 2.我通过reflector查看了HTTPResponseStream,发现了一些潜在的瓶颈,看起来有一些封送正在进行,但没有明显的问题,事实上,当使用分块时,它会生成与我的本机服务器相同的分块数组


任何想法都值得赞赏,

它使用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的内存压力应该很小。