Funktionsweise von Objektpooling
Wenn Sie eine Komponente für den Pool konfigurieren, verwaltet COM+ Instanzen davon in einem Pool, die für jeden Client aktiviert werden können, der die Komponente anfordert. Alle Objekterstellungsanforderungen werden über den Pool-Manager verarbeitet.
Pools werden auf Komponentenbasis konfiguriert und verwaltet. Ein Pool besteht aus homogenen Objekten, die dieselbe CLSID verwenden. Die einzige Ausnahme gilt für Transaktionsobjekte, für die Unterpools verwaltet werden, die Objekte mit Transaktionsaffinität enthalten, während eine Transaktion aussteht.
Wenn die Anwendung gestartet wird, wird der Pool auf die von Ihnen administrativ angegebene Mindestebene aufgefüllt, solange die Objekterstellung erfolgreich ist. Wenn Clientanforderungen für die Komponente eingehen, werden sie auf einer First-Come-First-Served-Basis aus dem Pool erfüllt. Wenn keine gepoolten Objekte verfügbar sind und der Pool noch nicht auf der angegebenen maximalen Ebene liegt, wird ein neues Objekt erstellt und für den Client aktiviert.
Wenn der Pool seine maximale Ebene erreicht, werden Clientanforderungen in die Warteschlange gestellt und erhalten das erste verfügbare Objekt aus dem Pool. Die Anzahl der Objekte, einschließlich aktivierter und deaktivierter Objekte, übersteigt nie den maximalen Poolwert. Objekterstellungsanforderungen treten nach einem administrativ angegebenen Zeitraum auf, sodass Sie steuern können, wie lange Clients auf die Objekterstellung warten. Bei einem Timeoutfehler erhält der Client den Fehler E_TIMEOUT von CoCreateInstance zurück.
Nach Möglichkeit versucht COM+, ein Objekt wiederzuverwenden, nachdem es von einem Client freigegeben wurde, bis der Pool seine maximale Ebene erreicht. Das Objekt ist für die Überwachung seines Zustands verantwortlich, um zu bestimmen, ob es wiederverwendet werden kann, und sollte einen geeigneten Wert für IObjectControl::CanBePooled zurückgeben.
Wenn ein Poolobjekt erstellt wird, wird es zu einem größeren Objekt aggregiert, das die Lebensdauer des Objekts verwaltet. Das äußere Objekt ruft Methoden für IObjectControl zu geeigneten Zeitpunkten im Lebenszyklus des Objekts wie folgt auf:
- Die Activate-Methode wird immer dann aufgerufen, wenn das Objekt in einem bestimmten Kontext an einen Client zurückgegeben wird.
- Die Deactivate-Methode wird immer dann aufgerufen, wenn ein Objekt vom Client freigegeben wird oder im Fall eines JIT-aktivierten Objekts, wenn es deaktiviert wird.
- Die CanBePooled-Methode wird immer dann aufgerufen, wenn ein Objekt an den allgemeinen Pool zurückgegeben werden soll. Wenn das Objekt erkennt, dass sich eine wiederverwendbare Ressource in einem fehlerhaften Zustand befindet, sollte es false für diese Methode zurückgeben, und der Pool-Manager verwirft das Objekt.
Ein -Objekt muss nicht unbedingt IObjectControl implementieren. Wenn dies nicht der Fall ist, werden Instanzen immer wiederverwendet, bis die maximale Poolebene erreicht ist.
Ausführliche Informationen zum Konfigurieren von Komponenten, die in einem Pool zusammengefasst werden sollen, finden Sie unter Konfigurieren einer Komponente für den Pool.
Zugehörige Themen