我在 IIS 上部署了一个 wcf 服务,使用 basicHttpBinding 和 aspNetCompatibilityEnabled=true
我还有一个测试客户端,它同时调用多个服务功能。为了检查客户端和服务器上服务调用的性能,我计算了在客户端(在代理代码中)和服务器上完成服务请求所需的平均时间。
经过 8 小时的测试(服务器和客户端在同一台机器上),我发现客户端的平均响应时间约为 34 毫秒,而服务器上的平均执行时间约为 3 毫秒,因此差异为 31 毫秒。
我想知道为什么每次调用都需要31ms,合理吗?我怎样才能减少这个?
编辑:在“Marc Gravell”回答后
- SSL 在 IIS 中启用,WCF 级别上没有其他安全性
- 服务执行较小的数据库操作,您可以通过给定的 3ms 平均执行时间来估计操作成本。 (如果这就是你所说的有效负载)
- 没有 Blob,没有 MTOM
- 发送和接收消息不大,可能在 100 字节到 500 字节左右,简单消息合约
- 如果需要其他任何信息来诊断此问题,请告诉我
- 实际上,我更关心 TCP 连接建立的成本,如果您能解释一下 WCF 如何执行 TCP 连接工作以及它与不同的可用绑定是否有任何差异
经过长时间的研究和测试执行,我得出的结论是,这是由于服务器上的线程调用时间而发生的,因为 WCF 使用 I/O 完成端口(一种高效的线程模型)。详细信息在这里 http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx)
并且您需要在服务器启动时设置最低并发要求,可以按如下方式完成
ThreadPool.SetMinThreads(100, 100);
否则,您将因池最小大小的默认值为 2,2 而遭受损失,并且任何新线程都需要创建线程的成本(每个开发人员都知道这是成本最高的过程)。通过执行上述操作,线程池将保持至少 100 个线程准备工作,并且您的服务将会稳定运行。
因为我已将腰部 31 毫秒减少到 6 毫秒。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)