快速背景:我知道HTTPListener使用http.sys内核驱动程序,据说可以使其表现出色。但是,当在托管的http服务器和 native vc++服务器之间进行一些性能基准测试时,我发现 native 端大约增加了15 MB/s。测试设置为两台实验室计算机,这些计算机均采用1gb nics格式进行了全新格式化。在 native 端,我看到大约110 MB/s,接近nic减去开销的100%,而使用HTTPListener时,我看到的是〜94 MB/s(最大100)。
测试是苹果对苹果,
总的来说,我希望我应该能够通过HTTPListener接近110 MB/s的 native 服务器,而15 MB/s的成本似乎很高。
问题:
1.我还缺少其他针对托管的优化吗?
2.有哪些潜在的瓶颈,我通过反射器查看了HTTPResponseStream,看起来正在进行一些编码(marshal)处理,但没有任何明显的问题,实际上,在使用分块时,它会产生与 native 服务器相同的块数组。
任何想法表示赞赏,
最佳答案
它使用Http.sys的事实并不意味着没有从 native 到托管的过渡。从上面提到的MSDN文章:
HTTP.sys provides connection management, bandwidth throttling, and Web server logging.
由于您正在运行托管代码,因此您具有互操作性(与托管互操作无关,而不是与COM互操作相混淆),具有垃圾回收等。它永远不会像纯本地c++实现那样快。
编辑:为了更加清楚,您仍在运行.NET进程,您只是在内核模式而不是用户模式下挂接到IIS。一篇很棒的文章在这里:http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp
关于.net - HTTPListener与 native HTTP性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4455887/