2010-02-18 231 views
3

值得使用ConcurrencyMode.Multiple和I​​nstanceContextMode.Single屬性來設置服務以保存使用命名管道時的一些性能嗎?WCF命名管道服務設置

我的意思是當我這樣做時,我必須打擾多線程問題。

回答

3

我自動爲我的WCF服務使用ConcurrencyMode.Multiple,因爲我通常希望服務能夠同時處理多個請求。對我而言,這似乎是一種服務最直觀的行爲(即:如果我打電話給Web服務,並且必須等待來自其他用戶的10個未完成請求才會被處理),這很奇怪。

使用ConcurrencyMode.Single強制服務一次處理單個請求(如果發生多個請求,它們將排隊)。這可能會降低請求速度。

但這取決於每個請求的作用。簡單的數學計算或字符串操作將變得如此之快以至於WCF的開銷將成爲您的主要瓶頸。如果您的服務查詢或修改某種數據庫,那麼執行數據庫操作的時間可能會成爲您的瓶頸。但是,如果數據庫很小,或者您只希望少數客戶端,那麼您可能永遠都不會注意到其中的差異。如果您從5個Web服務提取數據並執行一些複雜的合併操作,這可能是一個問題。

除非您知道您會有多個同時發生的請求,否則請使用ConcurrencyMode.Single運行,直到無法滿足某種客觀性能標準。然後,您需要執行通常的基準測試,以確定您的服務中哪些部分最慢。加快速度。如果發生ConcurrencyMode.Single是慢速位,請改爲多個!

3

它值得嗎?這取決於你對性能增益的重視程度,相比之下它的實現有多困難。

性能增益有多好?這取決於應用程序。只有你可以通過測量來回答這個問題。

一如既往的性能,你必須措施

如果它已經夠快了,不要打擾。

如果速度不夠快,請測量應用程序花費的時間。在大多數涉及進程外資源訪問(如數據庫訪問)的應用程序中,瓶頸在這裏,而不是在WCF服務的InstanceContextMode中。

但是,您不寫什麼樣的應用程序是您的WCF服務,所以它可能會在您的情況有所不同。

+0

此應用尚未完成。它處於早期發展階段。 「你的WCF服務是什麼類型的應用程序」是什麼意思? – user137348

+2

我的意思是說,現在你的問題已經存在,你的服務可以做任何事情,因爲你沒有描述它應該做什麼。它可以訪問數據庫,提供計算密集型服務或者提供簡單的通信中繼服務。性能特徵將受到它需要做的事情的影響。 –