2010-01-28 51 views
0

我有一個使用相當昂貴的對象來創建的服務。我想提高通話效果。WCF性能:我可以創建一個像ConnectionPooling那樣的對象池嗎

當我刪除的對象和運行負載測試,就像我多少調用每秒能做到,我不得不情況之間的巨大的性能差異。

情況1.我刪除了昂貴的對象:每秒調用〜= 130. 情況2.我使用它作爲正常的,對象:速率是〜= 2每秒。

我有一個.NET WCF服務託管在IIS 2008服務器上。

我想知道是否有辦法我可以創建一個對象緩存/池和手那些對象到服務的每個調用。

儘管/評論可能有助於這種情況?

回答

1

您可以運行在每個會話模式WCF服務,並使用Singleton模式的對象,這樣你只能創建每個會話一次的對象,每次調用而不是一次。

您也可以使用企業庫文件緩存來緩存對象。

+0

將對昂貴對象(在本例中爲Castle動態代理)的訪問權限更改爲靜態引用可解決該問題。 –

1

如果昂貴的部分正在建設的對象的狀態,而您只希望限制您創建一個對象的次數,我建議使用經久耐用。

持久WCF組件在呼叫之間和客戶端之間保持其狀態。每次調用某個方法時,都會將其狀態寫入持久性存儲區(默認情況下是一個sql server數據庫)。問題是你必須在要調用你的Durable組件的任何人之間傳遞一個上下文令牌。該令牌可以保存在文件或數據庫中或其他任何內容中。

這將允許您對該組件進行調用,它可以一次創建其狀態,然後只要能夠訪問其上下文標記,就可以從其他客戶端繼續調用它。

沒有掛在內存中,因爲對象消失每個客戶機關閉時間,但狀態持續。

這裏有一個tutorial

相關問題