WCF通道堆栈性能

时间:2016-11-11 17:13:11

标签: c# performance wcf

我们有一个大量使用的WCF服务,它必须支持高吞吐量。我的任务是建议改进以提高性能并观察我将尝试在下面描述的奇怪行为。

服务本身很简单,操作需要15毫秒到几秒才能完成,具体取决于正在执行的活动。此外,还有一个调度消息检查器形式的端点行为,它审核每个到Oracle数据库的入站和出站消息。

我已经使用Visual Studio组合了一个简单的负载测试,它使用从1到1000个并发调用的渐增负载配置文件来调用服务。当服务负载时,乐趣开始发生。

随着负载的增加,我们会看到响应时间的稳定增长。然后我启用了WCF跟踪获取有关WCF堆栈本身发生的事情的详细时序。

WCF追踪描绘了一个令人费解的故事。随着负载的增加,执行服务本身所花费的时间(即实现服务合同的类)在几十毫秒内保持相当稳定,但是在消息检查器中花费的时间大大增加 - 直到几百毫秒到三个或四秒钟。

最初我认为增加的原因是数据库将INSERTS阻塞到审计表中,但是当我在数据库调用周围放置秒表时间时,我发现它的速度相当于15ms-20ms。

消息检查器中的代码没什么特别的,在伪代码中,消息检查器AFterMessageReceived和BeforeMessageReply方法看起来像:

  

打开合并的Oracle连接
  创建参数和命令对象并填充审计信息
  执行非查询(插入数据)
  关闭连接

我无法弄清楚为什么在WCF跟踪中测量的审计行为经过的时间比使用秒表计时测量的时间长很多倍...任何建议都将不胜感激。

0 个答案:

没有答案