共用方式為


使用物件共用改善效能

在某些情況下,對象共用可能會非常有效,因此可大幅提升效能。 重複使用物件以充分利用最佳優勢的一般概念是盡可能多地集區資源,從實際執行的工作中排除初始化,然後在部署時間以系統管理方式調整集區特性給實際硬體。 也就是說,您應該依照下列步驟繼續進行:

  1. 撰寫 物件,以排除針對任何用戶端執行的昂貴初始化和資源擷取,作為代表用戶端執行實際工作的必要條件。 盡可能將繁重的物件建構函式寫入集區,讓物件保留這些建構函式,並在用戶端從集區取得物件時立即可供使用。
  2. 管理員 設定集區以達到可用硬體資源的最佳平衡,通常交易專用於維護特定大小的記憶體集區,以換取更快速的用戶端存取和使用物件。 在特定時間點,共用將會降低傳回,而且您可以取得足夠的效能,同時限制特定元件可能的資源使用量。

執行實際工作或取得資源

如果您有一個元件,用戶端會短暫且快速地連續使用,其中相當一部分的物件使用時間會花在取得資源或初始化之前,再對用戶端執行特定工作,則撰寫您的元件以使用對象共用是一大勝。

您可以撰寫元件,讓物件建構函式中盡可能執行所有用戶端一致的耗時工作—取得一或多個連線、執行腳本、從檔案或跨網路擷取初始化數據等等。 這會影響集區每個這類資源。 您正在共享執行某些工作所需的資源與泛型狀態組合。

在此情況下,當用戶端從集區取得物件時,這些資源會立即可供使用。 一般而言,他們會使用 對象來執行一些小型的工作單位、推送或提取數據,然後物件會呼叫 IObjectContext::SetComplete IObjectContext::SetAbort 並傳回。 透過這類快速火力使用模式,集區會產生絕佳的效能優勢。 您可以充分運用無狀態自動交易程序設計模型的簡單性,但可達到與傳統具狀態元件相等的效能。

不過,如果用戶端每次呼叫物件時都會使用物件很長一段時間,則共用會比較不合理。 隨著使用時間相對於初始化時間增加,您獲得的速度優勢是邊際優勢。 您會收到減少的傳回,可能無法證明保留使用中物件集區所需的記憶體成本。

跨多個用戶端共用成本

分解初始化的一個變化是,您可以使用共用來統計攤銷取得昂貴資源的成本。 如果您擷取下載或初始化一次,然後重複使用物件,則您會在其存留期內使用該物件的所有用戶端共用該成本。 每個物件只會產生一次繁重的建構時間。

預先配置物件

如果您指定非零的集區大小,當應用程式啟動時,將會建立和集區物件數目下限,準備好供任何呼叫應用程式的用戶端使用。

使用集區管理管理資源

您可以使用集區大小上限,以非常精確地控管使用資源的方式。 例如,如果您已授權特定數目的資料庫連線,您可以控制您隨時開啟的連線數目。

當您考慮用戶端使用模式、物件使用特性,以及記憶體和連線等實體資源時,當您進行效能微調時,可能會找到一些最佳的平衡點。 集區物件會在某個點之後產生遞減的傳回。 您可以判斷所需的效能層級,並將這與達成目標所需的資源進行平衡。

為了在設定物件共用時加速效能調整,您可以監視應用程式中元件的物件統計數據。 如需詳細資訊,請參閱 監視物件統計數據

改善 JIT 啟動元件的效能

對象共用非常適用於 COM+ Just-In-Time 啟用 服務。 藉由共用正在啟動 JIT 的物件,您可以加快物件重新啟用的速度。 您會獲得 JIT 啟用開啟通道的優點,同時降低重新啟用的成本。 在此案例中,您可以使用共用來管理您想要配置給具有使用中參考之對象的記憶體數量。

在交易式元件時,您很可能會共用 JIT 啟動的元件。 對象共用已優化以處理交易式元件。 如需詳細資訊,請參閱 共用交易物件

COM+ 物件建構函式字串

控制物件存留期和狀態

對象共用的運作方式

共用交易物件

可集區物件的需求