快速背景: 我理解 HTTPListener 使用 http.sys 内核驱动,据说它是一个非常高效的性能执行程序。然而,在使用受管理的 HTTP 服务器和本地 VC++ 服务器进行一些性能基准测试时,我发现本地服务器的速度大约比受管理的服务器快了 15 MB/s。测试设置为两台新格式化的实验室计算机,配备 1gb 网络接口卡。在本地方面,当使用 HTTPListener 时,我看到的速度约为 94 MB/s(最大值 100),而当使用本地服务器时,则可以看到约 110 MB/s 的速度,这几乎等于网卡的 100% 减去开销。
测试是苹果对苹果的比较,
- 都发送相同的有效负载 (~120 mb)
- 我使用相同的托管客户端应用程序来测试两个服务器
- 对于托管版本,我已禁用 Nagle (但测试了两种方式,结果相同)
- 我运行一批测试并计算吞吐量,有趣的是,托管版本的标准偏差更高,即与原生版本相比结果不太一致。
总体而言,我希望通过 HTTPListener 能够接近本地服务器的 110 MB/s,15 MB/s 看起来相当昂贵。
问题: 1. 是否存在我所忽略的受管理优化? 2. 有哪些潜在瓶颈?我通过 Reflector 查看了 HTTPResponseStream,发现有一些马歇尔处理,但没有明显的问题,事实上,在使用分块时,它会生成与我的本地服务器相同的块数组。
感谢您的任何想法,
HttpListener
类使用HTTP.SYS?IIS使用它,但不是HttpListener
,事实上如果它使用的话会很有趣。因此,请提供参考资料,如果您认为它使用了HTTP.SYS。 - Aliostad