.net - HTTPListener与 native HTTP性能

标签 .net performance httplistener

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

测试是苹果对苹果,

  • 都发送相同的有效载荷(〜120 mb)
  • 我正在使用相同的托管客户端应用程序来测试两个服务器
  • 对于Managed,我禁用了Nagle(但是两种方法都进行了测试,结果是相同的)
  • 我运行了一批测试并计算了吞吐量,有趣的是,托管std偏差较高,即与本地相比,结果不一致。

  • 总的来说,我希望我应该能够通过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/

    相关文章:

    .net - 需要帮助通过 XML 修改 PrintTickets

    .net - 组合框选定值返回 DataRowView

    .net - 滚动你自己的消息循环,有什么陷阱吗?

    javascript - Chrome 性能监视器中每种颜色的含义是什么?

    c# - HttpListener 设置总连接超时

    C# 反射(reflection)为什么 GetFields 会列出我尚未创建的字段?如何排除它们?

    java - 最有效地合并 2 个文本文件。

    PHP - 具有多个数据库的应用程序

    c# - 基于HttpListener的自托管站点——如何处理鉴权?

    c# - 使用 Google Chrome 和 HTTPListener 获取 ProtocolViolationException