Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů