【发布时间】:2015-07-22 20:13:50
【问题描述】:
为什么配置了每次调用实例化和多个并发的 WCF 服务在使用不同进程运行时会执行不同的操作,而从线程调用时则完全不同?
我有一个应用程序通过线程数分发数据并对 WCF 服务进行调用(不要认为代码中发生锁定,将再次测试)。在测试期间注意到分发应用程序中增加的线程数量不会提高 wcf 处理服务的整体性能,平均约为 800 mpm(每分钟处理的消息数),因此吞吐量不会真正改变,但是如果您运行第二个应用程序,那么平均吞吐量会增加到~1200 英里/分钟。
我做错了什么?我错过了什么?我无法理解这种行为。
更新 #1(对 cmets 中的问题的回答)
感谢您如此快速的回复。 配置中的最大连接数设置为 1000(在 system.net 中是)。 参考这篇文章wcf Instances and threading 最大调用应该是 16 x 核心数,所以我假设如果在 2 cpu wcf 服务上调用约 30 个线程应该接受大部分线程调用?
这和共享内存有什么关系吗?因为我认为这可能是多线程和进程之间的唯一区别。
现在没有机会用更多的 cpu 或单个来测试它。什么时候可以做。
【问题讨论】:
-
您是在单 CPU 核心环境中测试这个吗?我猜想涉及多个核心。尝试在单核环境中运行您的测试。
-
你使用什么交通工具?
-
尝试在您的应用程序配置(不是 wcf 配置)的 system.net 部分增加 maxconnection 值
<system.net> <connectionManagement> <add address = "*" maxconnection = "24" /> </connectionManagement> </system.net> -
我猜是由于线程之间的上下文切换造成的。
-
@weazel,您是否尝试过增加 naxconnection 值? danielroot.info/2009/02/…
标签: c# multithreading wcf