【发布时间】:2012-12-06 14:19:10
【问题描述】:
我有 wcf 服务和一些调试方法:
public Result DebugMethod(TimeSpan time){
Thread.Sleep(time);
return new Result { Code = new Random().Next()};
}
我想测试同步和异步调用之间的性能。
我将 Result 打包到 Response 类中,其中有互斥锁等待结果:
class Response {
public Result result;
bool loaded = false;
public ManualResetEvent _wait = new ManualResetEvent(false);
public Result get(){
if(!loaded){
_wait.WaitOne();
loaded = true;
}
return result;
}
还有我的 DebugMethodCompleted 事件:
//r - correct response structure, result - wcf response
r.result = result
r._wait.Set();
我调用 DebugMethodAsync 10 次,每次 TimeSpan = 1 秒。 然后,在所有异步调用之后,我正在检查结果(只是为了等待它们)。
所以我认为大约需要 1 秒。 但总是需要 5 秒。
如果我将调用次数更改为 n,则需要 n/2 秒才能获得所有响应,就像有时可能只是异步任务处理一样。
编辑: 似乎客户端应用程序中的所有异步调用都已进行,但服务器最多同时处理 2 个(来自一个客户端)。
所以: 客户端进行了 4 次异步调用并正在等待结果,服务器正在处理前两个,然后在 1 秒之后,第三个和第四个。
【问题讨论】:
标签: wcf performance asynchronous