如何使用ServiceThrottling调整WCF服务以获得更好的性能

时间:2012-07-25 07:23:08

标签: c# .net wcf

我是WCF服务的新手。

我们有一个收听MSMQ的服务。 对于服务,maxConcurrentInstances和maxConcurrentSessions设置为1。 这会导致队列中的大量消息和消息缓慢提供。

serviceThrottling元素中 maxConcurrentInstances maxConcurrentSessions 属性之间有什么区别。

目前需要10分钟才能提供120条非常慢的消息。

提高服务性能的理想价值应该是什么。

先谢谢

1 个答案:

答案 0 :(得分:4)

maxConcurrentInstances:无论并发模式和实例上下文模式如何,可以同时为请求提供服务的服务类的最大实例数。

maxConcurrentSessions:同时处于活动状态的最大WCF会话数。


假设并发模式设置为无多线程。

IF Instance context mode = Per session 
   THEN  Max number of requests processed in parallel = Min(maxConcurrentInstances, maxConcurrentSessions)

IF Instance context mode = Per call 
   THEN Max number of requests processed in parallel = maxConcurrentInstances

IF Instance context mode = Single 
   THEN Max number of requests processed in parallel = 1

假设并发模式设置为多线程。

单个实例现在可以处理多个请求,但您必须处理并发问题。


重要的问题是:您如何选择实例上下文模式?

  • 您对多线程编程没有信心:坚持 PerSession PerCall
  • 您无需在同一客户端的来电之间保持服务级别的数据:避免PerSession
  • 创建服务的新实例非常昂贵:使用单个,但要准备好处理并发问题。

之后,需要调整最大实例数(对于PerCall)和会话(对于PerSession)。通常你首先将它设置为任意数字,如100,看看它是否使事情更快。如果确实如此,那很好。如果没有,请检查您的实例是否足够快速创建。