我想要識別SingleCall和Singleton激活方法之間的區別,當實現一個服務器來使用.NET Remoting託管一個對象時。似乎SingleCall的開銷是必須爲每個客戶端調用構造和清理一個對象,而Singleton具有僅能夠服務有限數量的同時請求的限制。我期待儘可能提高表現。我應該選擇哪一個?使用服務器激活對象使用.NET Remoting時,SingleCall和Singleton激活之間的折衷是什麼?
1
A
回答
2
默認情況下,您應該使用SingleCall。
另外,請記住,使用SingleCall對象時,不能共享呼叫的狀態。
我發現這個網站一個很好的資源,當談到.NET遠程: http://www.thinktecture.com/resourcearchive/net-remoting-faq/remotingusecases
3
你是對的。 SingleCall爲每次調用構建對象,並且可以接受多個同時請求,但不能在調用之間共享數據,而Singleton構建單個對象以處理允許數據共享的多個調用,但限制同時連接。但是,如果您有一些關於如何構建線程安全對象的概念,則可以執行一些調整。
首先,我會建議使用Singleton,因爲它只爲許多人創建一次。這也具有讓您存儲信息並在連接到用戶之間共享信息的優勢,而無需經常打開外部商店。
其次,我會研究將ConcurrencyMode = ConcurrencyMode.Multiple添加到服務的ServiceBehaviors中。這允許多個用戶同時擊中你的單身人士。
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService : ICalculatorConcurrency
{
…
}
第三,清理任何使這個類不是線程安全的代碼。當訪問多線程可以同時訪問的局部變量時,應該鎖定對象。
大量有關這些話題良好的信息可以在這裏找到:
相關問題
- 1. 如何在Remoting中使用singleton和singleCall
- 2. .NET Remoting - 關於RegisterWellKnownServiceType和激活遠程對象的問題
- 3. .NET Remoting:如何在服務器上立即激活(遠程)對象?
- 4. .NET遠程和服務器激活的對象
- 5. 何時使用JAF激活
- 6. 使用System.Runtime.InteropServices.COMException激活
- 7. 激活使用DTE
- 8. 服務激活器未被調用
- 9. 亞馬遜用於EC2激活的服務是什麼?
- 10. 本地激活oauth2憑證服務器上未使用服務
- 11. keras使用激活層而不是激活參數
- 12. Bugzilla的激活/取消激活任務
- 13. 使用jquery使類激活
- 14. 內容豐富者與服務激活者之間的區別是什麼?
- 15. 激活使用的引導
- 16. 獲取所有「已激活」和「未激活」Windows服務器的列表
- 17. 爲什麼Django註冊使用「激活窗口」來激活帳戶?
- 18. 試圖用激活碼激活產品
- 19. 無法激活WCF服務
- 20. 使用服務激活的工作流定製服務主機
- 21. QTimer singleShot使用激活
- 22. 使用Angular JS激活API
- 23. 如何激活使用jQuery
- 24. 使用Fluen-nHibernate激活CPU
- 25. 使用觸發器激活觸發器
- 26. 已激活和取消激活
- 27. 激活/取消激活遠程機器上的Windows NT服務器
- 28. MonoTouch激活/重新激活
- 29. 激活/取消激活virtualenv
- 30. 停止激活激活