hun*_*aro 17
2016年11月更新:HttpListener在从远程计算机接收流量时运行良好.但是,当客户端在localhost上时,对于大型有效负载,HttpListener在性能方面是一个糟糕的选择.造成这种情况的部分原因是因为HttpListener使用的是http.sys,这是一个内核模块,显然这个实现会导致身体数据的几个额外副本.例如,在C#中将100 MB从一个阵列复制到另一个阵列需要35 ms,而从本地客户端向HttpListener发送100 MB需要350 ms(是的,长10倍).在这种情况下切换到Mono的HttpListener会将时间减少到250 ms.将TcpListener与Socket客户端一起使用需要180毫秒.使用MemoryMappedFiles更换CircleBuffer的套接字使用需要55毫秒.因此,HttpListener没有 从本地计算机访问时,对于大型有效负载运行良好.注意:如果您尝试重现此测试,则需要注意测量时差.Stern开始发送数据并在接收过程中填充数组时,因为一些发送/写入方法几乎立即返回而不发送任何数据(您可以通过发送一个零数组然后从阵列的后面朝向前方;您将接收几乎所有的,证明数据在函数返回后很久才发送).
有关HttpListener与Mono的HttpListener的本地机器性能不足的详细信息来自我的一位同事:https: //www.linkedin.com/pulse/http-inefficiency-dominika-blach