簡介
引用封送對象 (MBR) 無論是伺服器激活的 Singleton 對象還是客戶端激活的對象,都不會永遠駐留在記憶體中。租約是 .NET 遠程處理系統開始執行刪除某個特定對象並回收記憶體這一進程之前,該特定對象在記憶體中處於活動狀態的時間。伺服器應用程式域的租約管理器一個對象,它確定何時標記遠程對象以進行垃圾回收。主辦方是可以通過將其本身註冊到租約管理器來為特定對象請求新租約的對象。
只要 MBR 對象在應用程式域之外進行遠程處理,就將為該對象創建生存期租約。每個應用程式域都包含一個負責管理其域中的租約的租約管理器。租約管理器定期檢查所有租約以確定過期的租約時間。如果租約已過期,租約管理器將遍歷該對象主辦方的列表,並查詢是否有誰要續訂租約。如果沒有任何主辦方續訂該租約,租約管理器將移除該租約,該對象也會被刪除,而垃圾回收機制將回收其記憶體。因此,如果對象被主辦方多次續訂租約或被客戶端持續調用,其生存期可以比其生存期租約長得多。
由於遠程對象的生存獨立於其客戶端的生存,因此簡單或輕量對象的租約可以很長,被大量的客戶端使用,並且被管理器或客戶端定期續訂。由於分散式垃圾回收所需的網路通信量很小,這種方法將高效地使用租約。但是,使用稀有資源的遠程對象可以具有生存期較短的租約,而客戶端會以非常短的時間段頻繁續訂該租約。當所有客戶端都完成對遠程對象的處理後,.NET 遠程處理系統將很快刪除該對象。這種策略增加了網路通信量以更有效地使用伺服器資源。
方法
使用租約管理遠程對象的生存期是引用計數的一種替換方法,引用計數在不可靠的網路連線上可能是複雜而低效的。雖然可以將租約配置為延長遠程對象的生存期以超過所需的精確長度,但是由於減少了專用於引用計數和進行 ping 操作的客戶端的網路通信量,因而使租約在為特定方案正確配置時成為一種很有吸引力的解決方案。