我一直在使用WCF和MSMQ进行概念验证。我一直在使用默认值This Article进行限制设置,并将自己的设置添加到配置文件中。我有2个运行此应用程序的四核Xeon CPU。无论我应用什么设置,它总是只能一次抓取8条消息(与我的处理内核相匹配)。我希望在一个事务中处理每个消息,这可能是问题的一部分......不确定。我认为它会同时处理更多的消息。
服务行为:
[ServiceBehavior(UseSynchronizationContext = true,
ReleaseServiceInstanceOnTransactionComplete=true,
ConcurrencyMode = ConcurrencyMode.Single,
InstanceContextMode = InstanceContextMode.PerCall)]
端点行为:
<endpointBehaviors>
<behavior name="endpointBehavior">
<transactedBatching maxBatchSize="1" />
</behavior>
</endpointBehaviors>
我自己的服务节流:
<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" />
我忽略了什么吗?也许我只是不完全理解默认/自定义油门设置(可能)。
修改
我已将ConcurrencyMode(已更改为多个)与ReleaseServiceInstanceOnTransactionComplete设置一起修改。改为多人似乎没有改变什么?
修改 它可能是TransactionBatch设置吗?我把它设置为一个......?
谢谢,
取值
答案 0 :(得分:4)
我找到了一个博客,向我指出了一些关于WCF限制/性能的好文档。我在处理应用程序中添加了一些元输出,并且能够获得我想要的性能。通过向我的进程(ManagedThreadID等)添加更多信息,我可以看到我获得的吞吐量比我原先假设的要多得多。我还在下面的博客中发现了一些有用的提示。
谢谢,
S
答案 1 :(得分:0)
由于您正在运行PerCall实例化,因此应增加MaxConcurrentInstances。即使在.Net 4中,默认值为26.在4.5“默认值是MaxConcurrentSessions的默认值和MaxConcurrentCalls的默认值的总和。”
BTW ...除非您使用InstanceContextMode.PerCall,否则WCF将在多个线程上调用您的实例。 InstanceContextMode.PerCall +任何ConcurrencyMode = N个服务实例上方法的并发调用,其中N由服务限制Reference确定