Sdílet prostřednictvím


Zlepšení výkonu pomocí sdružování objektů

Sdružování objektů může být za určitých okolností velmi efektivní a přináší výrazné zvýšení výkonu. Obecnou myšlenkou, jak co nejlépe využít opětovné použití objektů, je sloučit co nejvíce zdrojů, oddělit inicializaci od skutečné vykonávané práce a následně administrativně přizpůsobit charakteristiky fondu skutečnému hardware v době nasazení. To znamená, že byste měli pokračovat podle následujících kroků:

  1. Napište objekt tak, aby vyčlenil nákladné inicializace a získání prostředků, které se provádějí u každého klienta jako nezbytný krok ke skutečné práci ve prospěch klienta. Pište náročné konstruktory objektů tak, aby co nejvíce zdrojů bylo uloženo ve fondu, a aby je objekt držel a byly ihned k dispozici klientům, když si z fondu pořídí objekt.
  2. Administrativně nakonfigurujte fond tak, aby se dosáhlo nejlepší rovnováhy v dostupných hardwarových prostředcích; obvykle se vyměňuje paměť vyhrazená pro udržování fondu určité velikosti za rychlejší přístup klientů a využití objektů. V určitém okamžiku dojde k postupnému snižování návratnosti fondů, a přitom můžete dosáhnout dostatečného výkonu, aniž byste limitovali možné využití prostředků konkrétní komponentou.

Provádění skutečné práce nebo získávání zdrojů

Pokud máte komponentu, kterou budou klienti používat krátce a rychle po sobě, kde velká část času použití objektu je strávena získáním prostředků nebo inicializací před konkrétní prací pro klienta, je pravděpodobné, že napsání komponenty pro použití sdružování objektů bude pro vás velkou výhrou.

Komponentu můžete napsat tak, aby v konstruktoru objektu prováděli co nejvíce časově náročné práce, která je jednotná pro všechny klienty – získávání jednoho nebo několika připojení, spouštění skriptů, načítání dat inicializace ze souborů nebo přes síť atd. To má vliv na sdružování každého takového zdroje. Provádíte sdružování kombinace prostředků a obecného stavu potřebného k provedení určité práce.

V takovém případě mají klienti objekt z fondu okamžitě k dispozici. Obvykle používají objekt k provedení nějaké malé jednotky práce, odesílání nebo přijímání dat, a pak objekt zavolá IObjectContext::SetComplete nebo IObjectContext::SetAbort a vrátí. Díky vzorům rychlého použití, jako je tento, přináší sdružování vynikající výhody výkonu. Můžete plně využít jednoduchost bezstavového modelu automatického programování transakcí, ale dosáhnout výkonu s tradičními stavovými komponentami.

Pokud však klienti používají objekt po dlouhou dobu pokaždé, když ho volají, bude sdružování dávat méně smysl. Výhodou rychlosti, kterou získáte, je mezní, protože doba použití se zvyšuje vzhledem k času inicializace. Získáte snížení výnosů, které nemusí ospravedlnit náklady na paměť potřebnou k uložení fondu aktivních objektů.

Sdílení nákladů napříč více klienty

Varianta vyjmutí inicializace je, že pomocí poolování můžete statisticky rozložit náklady na získání drahých zdrojů. Pokud jednou nesete náklady na získání nebo inicializaci a poté objekt znovu použijete, rozložíte tyto náklady mezi všechny klienty, kteří objekt používají po dobu jeho životnosti. Čas těžké výstavby je vynaložen pouze jednou na objekt.

Předběžné přidělení objektů

Pokud zadáte nenulovou minimální velikost fondu, vytvoří se minimální počet objektů, které budou při spuštění aplikace ve fondu, připravené pro všechny klienty, kteří volají do aplikace.

Řízení používání zdrojů se správou sdílených zdrojů

Maximální velikost fondu můžete použít k řízení velmi přesného způsobu používání prostředků. Pokud jste například licencovali určitý počet databázových připojení, můžete kdykoli určit, kolik připojení máte otevřených.

Když vezmete v úvahu vzory použití klienta, vlastnosti použití objektů a fyzické prostředky, jako jsou paměť a připojení, pravděpodobně při ladění výkonu zjistíte optimální rovnováhu. Sdružování objektů bude po určitém bodě poskytovat klesající výnosy. Můžete určit, jakou úroveň výkonu potřebujete, a vyvážit ji s tím, jaké prostředky jsou nezbytné k jeho dosažení.

Pokud chcete usnadnit ladění výkonu při konfiguraci sdružování objektů, můžete monitorovat statistiky objektů pro komponenty v aplikaci. Podrobnosti najdete v tématu Monitorování statistik objektů.

Zvýšení výkonu komponent JIT-Activated

Sdružování objektů funguje velmi dobře s službou aktivace modelu COM+ za běhu. Sdružováním objektů aktivovaných JIT můžete urychlit opětovnou aktivaci objektu. Získáte výhody uchovávání kanálu otevřeného aktivací JIT a zároveň zmírníte náklady na opětovnou aktivaci. V tomto případě můžete použít sdružování a řídit, kolik paměti chcete přidělit objektům, které mají aktivní odkazy.

S největší pravděpodobností budete vytvářet fond komponent, které jsou aktivovány prostřednictvím JIT, pokud jsou transakční. Sdružování objektů je optimalizované pro zpracování transakčních komponent. Další informace naleznete v tématu sdružování transakčních objektů.

Řetězce konstruktorů COM+ objektů

řízení životnosti a stavu objektu

fungování sdružování objektů

sdružování transakčních objektů

Požadavky na poolovatelné objekty