【发布时间】:2010-07-31 09:26:36
【问题描述】:
我正在尝试为 WCF 服务模拟 X 个并发请求并测量每个请求的响应时间。我想让所有请求或多或少同时到达服务。
作为第一步,我使用 Thread 类生成了 X 个线程,并调用了 Start 方法。为了同步所有请求,在线程回调中,我打开连接并使用 Monitor.Wait 来阻止请求被触发,直到所有线程都被创建并启动。启动所有线程后,我调用 Monitor.PulseAll 来触发 WCF 客户端代理上的方法调用。
当我以这种方式执行请求时,我发现响应中有很大的延迟。一个应该只有几毫秒的请求,现在大约需要一秒钟。
我还注意到发送请求的时间和服务方法接收到的时间之间存在巨大的延迟。我通过将发送客户端时间戳作为参数值发送给每个请求的服务方法来测量这一点。
我有以下设置。假设我要触发的并发请求数为“X”。还要注意以下设置,我没有遇到任何拒绝服务问题。
- 调用链如下,Client->Service1->Service2->Service3
- 所有服务都是 PerCall,并发设置为 Multiple。
- 限制设置为 X 个并发调用,X 个并发实例。
- MaxConnections,服务上的 ListenBacklog 到 X。
- 客户端和服务器上 ThreadPool 的最小/最大线程数设置为 X(我已应用 Microsoft 提供的补丁)。
不确定我测量的响应时间是否准确。我错过了一些非常琐碎的事情吗?
对此的任何意见都会有很大帮助。
谢谢。
-克里希南
【问题讨论】:
-
你试过X=1吗?添加线程时响应延迟是否会发生变化?
-
是的,确实如此。对于 X = 1,响应时间等于我在没有线程的情况下按顺序执行请求时得到的响应。还有一个信息。我使用 TCP 绑定。
标签: c# multithreading concurrency wcf