Požadavky na objekty s možností sdružování
Objekty určené pro sdílení musí splňovat určité požadavky, aby jedna instance objektu mohla být využívána více klienty.
Bez státní příslušnosti
Kvůli zachování zabezpečení, konzistence a izolace by objekty s možností sdružování neměly obsahovat žádný stav specifický pro klienta mezi klienty. Jakýkoli stav klienta můžete spravovat pomocí IObjectControl, provádění inicializace specifické pro kontext pomocí IObjectControl::Activate a vyčištění stavu klienta pomocí IObjectControl::D eactivate. Další podrobnosti naleznete v tématu Řízení životnosti a stavu objektu.
Bez spřažení vláken
Objekty z fondu nelze svázat s konkrétním vláknem; jinak by potenciálně mohl být výkon katastrofální. Z tohoto důvodu nelze označit objekty, které lze sdílet, ke spuštění v jednomvláknovém modelu; musí běžet ve vícevláknovém nebo neutrálním modelu. Kromě toho by objekty určené k použití v poolu neměly používat místní úložiště vlákna, ani by neměly agregovat marshaler podporující volné vlákno. Další podrobnosti o modelech vláken v prostředí COM+ viz COM+ Threading Models.
Poznámka
Prostředí Microsoft Visual Basic 6.0 a starších vývojových prostředí může vytvářet pouze součásti modelu bytu. V jazyce Visual Basic .NET mohou být komponenty sdíleny.
Agregovatelný
Objekty s možností fondu musí podporovat agregaci – to znamená, že musí podporovat vytváření voláním CoCreateInstance s argumentem pUnkOuter bez hodnoty NULL. Když COM+ aktivuje objekt v rámci poolu, vytvoří agregát pro řízení životního cyklu poolovaného objektu a pro volání metod na IObjectControl. Podrobnosti o vytváření agregovatelných objektů naleznete v části Aggregation.
Transakční komponenty
Objekty s možností sdružování, které se účastní transakcí, musí ručně zapojit spravované prostředky. I když je v rámci fondu, pokud váš objekt obsahuje spravovaný prostředek, jako je například připojení k databázi, neexistuje způsob, jak může správce prostředků automaticky zahrnout do transakce při aktivaci objektu v daném kontextu. Proto samotný objekt musí zpracovat logiku zjišťování transakce, vypnutí automatického zařazení správce prostředků a ruční zařazení všech prostředků, které obsahuje. Kromě toho by měl objekt ve fondu transakcí odrážet aktuální stav svých prostředků v hodnotách parametrů IObjectControl::CanBePooled. Další podrobnosti naleznete v tématu Sdružování transakčních objektů.
Implementace IObjectControl pro správu životnosti objektu
Objekty s možností fondu by měly implementovat IObjectControl, i když to není nezbytně nutné. Transakční komponenty, které jsou sdružovány, však musí implementovat IObjectControl. Tyto komponenty by měly monitorovat stav prostředků, které uchovávají, a oznámit, když je nelze znovu použít; když IObjectControl::CanBePooled vrátí hodnotu false, ukončí transakci. Další podrobnosti naleznete v tématu Řízení životnosti a stavu objektu.
Jazyková omezení
Komponenty vyvinuté pomocí jazyka Microsoft Visual Basic 6.0 a starších nelze sdružovat, protože tyto komponenty budou s vláknováním modelu bytu. Nicméně v jazyce Visual Basic .NET mohou být komponenty seskupovány.
Starší komponenty
Pokud nejsou transakční a odpovídají příslušným předchozím požadavkům, mohou být komponenty ve fondu i v případě, že nebyly výslovně napsány s ohledem na schopnost sdružování. Není nutné implementovat IObjectControl; komponenta, která to neudělá, se prostě nebude účastnit správy jeho životnosti. Pokud IObjectControl::CanBePooled není implementováno, bude objekt nadále opakovaně použit, dokud fond nedosáhne maximální velikosti.
Související témata
-
zlepšení výkonu pomocí sdružování objektů