2011-02-03 50 views
3

我有一個窗口服務,InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.MultipleWCF服務失速產卵線程

託管的WCF服務的綁定nettcp配置有將ListenBackLog =「512」和服務的行爲是配置maxConcurrentCalls =「512」

服務器和客戶端都在四處理器盒上運行,無所作爲。

我的測試客戶端使用自動生成的代理,並在25個線程池線程上執行25次異步調用。儘管線程數緩慢增加到全部25個,但它立即產生10個線程,然後每秒鐘啓動一個附加線程。 WCF服務器產生2-3個線程來處理請求。服務功能完成的工作需要幾百毫秒。完成所有客戶呼叫大約需要20秒的掛鐘時間。

我異形WCF服務器,並花費大量的時間在ThreadStart_Context調用了WaitOne()

有人可以告訴我,爲什麼它這麼慢?

+0

好吧,它看起來像實例化75客戶端只需要很長時間。這就是爲什麼我的客戶沒有像我認爲的那樣快速產生線索。它也影響了在這段時間內由已經使用客戶端的線程所做的任何服務功能調用。如果我讓它構建所有客戶端對象,然後開始撥打電話,它會很快運行。 – 2011-02-03 20:51:28

回答

0

我認爲這種行爲的原因是WCF正在使用的ThreadPool。它不會經常產生線程(達到最小值後每秒2次)。因此,您可以嘗試增加ThreadPool的最小大小(請首先閱讀關於此步驟的後果)。 或者您可以檢查在這種情況下是否可以使用ThreadPool的替換。