Udostępnij za pośrednictwem


Kontrolowanie okresu istnienia i stanu obiektu

Obiekt w puli może uczestniczyć w zarządzaniu jego aktywnością w puli przez model COM+, implementując IObjectControl. Po utworzeniu obiektu w puli jest on agregowany w większy obiekt, który będzie zarządzać obiektem, wywołując następujące metody w IObjectControl w regularnych punktach cyklu życia obiektu:

  • Aktywuj— wywoływana za każdym razem, gdy obiekt jest zwracany do klienta, aktywowany w określonym kontekście.
  • Dezaktywuj— wywoływana za każdym razem, gdy obiekt jest zwalniany przez klienta lub w przypadku obiektu aktywowanego przez JIT, gdy jest dezaktywowany.
  • CanBePooled — wywoływana za każdym razem, gdy obiekt ma zostać zwrócony do puli ogólnej.

Implementowanie IObjectControl jest opcjonalne, z wyjątkiem obiektów transakcyjnych, które powinny zawsze implementować CanBePooled w celu monitorowania stanu przechowywanych zasobów. Jednak w większości przypadków zaleca się zaimplementowanie IObjectControl, ponieważ zapewnia wydajny sposób zarządzania zachowaniem obiektu w puli, jak opisano poniżej.

Przeprowadzanie inicjalizacji Context-Specific

Za pomocą Aktywujmożna zainicjować obiekt w kontekście, w którym jest aktywowany dla danego klienta. Na przykład, aby określić, czy obiekt ma powiązanie z transakcją (jego zasoby mogą już być zaangażowane), możesz uzyskać identyfikator transakcji powiązany z danym kontekstem.

Zazwyczaj należy użyć Activatedo wykonania inicjowania, które jest spójne we wszystkich metodach uwidocznionych przez obiekt, traktując go jako część kontekstową konstruktora obiektu.

Czyszczenie wszystkich stanów klienta

Dezaktywując , można pozbyć się dowolnego stanu specyficznego dla klienta, który może istnieć, tak, aby obiekt wracał do puli w stanie całkowicie ogólnym i mógł być używany przez dowolnego klienta bez naruszania zabezpieczeń lub izolacji.

Kontrolowanie ponownego użycia obiektu

Za pomocą CanBePooledmożna monitorować stan wewnętrzny obiektu i raportować, czy jest on odpowiedni do ponownego użycia. Jeśli CanBePooled zwraca wartość True, a maksymalna pula nie została osiągnięta, obiekt zostanie z powrotem umieszczony w puli ogólnej. Jeśli CanBePooled zwróci wartość False, obiekt zostanie odrzucony. W przypadku składników transakcyjnych zwracanie wartości False spowoduje unieważnienie bieżącej transakcji.

Zazwyczaj należy zachować jakąś globalną zmienną dla obiektu, a jeśli wykryjesz, że połączenie jest nieprawidłowe lub zasób pewnego rodzaju jest w złym stanie, zaktualizuj tę zmienną, aby odzwierciedlała bieżącą sytuację i zwróć ją za pośrednictwem CanBePooled.

Jeśli obiekt nie implementuje CanBePooled, wystąpienia będą nadal ponownie używane do momentu osiągnięcia maksymalnego poziomu puli.

ciągi konstruktora obiektów COM+

Jak Działa Poolowanie Obiektów

Poprawa wydajności dzięki puli obiektów

Grupowanie obiektów transakcyjnych

Wymagania dotyczące obiektów przydzielanych do puli