對象共用的運作方式
當您將元件設定為集區時,COM+ 會在集區中維護它的實例,可供任何要求元件的客戶端啟用。 任何物件建立要求都會透過集區管理員來處理。
集區會根據每個元件進行設定和維護。 集區是由共用相同 CLSID 的同質物件所組成。 唯一的例外狀況是交易物件,其中子集區會保留包含交易暫止時具有交易親和性的物件。
當應用程式啟動時,只要建立物件成功,集區就會填入您系統管理指定的最低層級。 當元件的用戶端要求傳入時,會先從集區先到先得地滿足這些要求。 如果沒有集區物件可供使用,且集區尚未達到其指定的最大層級,則會為用戶端建立並啟動新的物件。
當集區達到最大層級時,用戶端要求會排入佇列,並從集區接收第一個可用的物件。 物件數目,包括啟動和停用,永遠不會超過集區值上限。 物件建立要求會在系統管理指定的期間之後逾時,以便您可以控制用戶端等候物件建立的時間長度。 發生逾時失敗時,用戶端會從 CoCreateInstance E_TIMEOUT回復錯誤。
盡可能,COM+ 會在用戶端放開對象之後嘗試重複使用物件,直到集區達到其最大層級為止。 對象負責監視其狀態,以判斷是否可以重複使用,而且應該針對 IObjectControl::CanBePooled 傳回適當的值。
建立集區物件時,它會匯總成較大的物件,以管理物件的存留期。 外部物件會在物件生命週期中的適當時間呼叫 IObjectControl 上的方法,如下所示:
- 每當物件傳回至用戶端時,就會呼叫 Activate 方法,該物件會在特定內容中啟動。
- 每當客戶端釋放物件時,或當停用 JIT 啟動的物件時,就會呼叫 Deactivate 方法。
- 每當物件傳回一般集區時,就會呼叫 CanBePooled 方法。 如果對象偵測到某些可重複使用的資源處於不良狀態,則此方法應該傳回 FALSE ,而集區管理員將會捨棄物件。
物件不一定需要實作 IObjectControl。 如果沒有,實例一律會重複使用,直到達到集區最大層級為止。
如需如何設定要集區之元件的詳細資訊,請參閱 設定要集區的元件。
相關主題