WCF服务停止生成线程

时间:2011-02-03 18:16:19

标签: .net multithreading wcf

我在Windows服务中托管了一个WCF服务,InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple

使用listenbacklog =“512”配置nettcp绑定,并使用maxConcurrentCalls =“512”配置服务行为

服务器和客户端都在四处理器盒上运行。

我的测试客户端使用自动生成的代理,并在25个线程池线程上进行25次异步调用。尽管线程计数很慢,但是它会立即生成10个线程,然后每隔一秒左右启动一个额外的线程。 WCF服务器生成2-3个线程来为请求提供服务。服务功能完成的工作需要几百毫秒。所有客户端调用都需要大约20秒的挂钟时间才能完成。

我已经分析了WCF服务器,它花了大部分时间在ThreadStart_Context中调用waitone()

有人能告诉我为什么这么慢吗?

1 个答案:

答案 0 :(得分:0)

我认为这种行为的原因是WCF正在使用的ThreadPool。它不会经常产生线程(达到最小值后每秒2次)。因此,您可以尝试增加ThreadPool的最小大小(请首先阅读此步骤的后果)。 或者你可以检查在这种情况下是否可以使用替换ThreadPool。