Udostępnij przez


Jak działa buforowanie obiektów

Podczas konfigurowania składnika do użycia w puli, COM+ będzie utrzymywać jego instancje w puli, gotowe do aktywacji dla każdego klienta żądającego składnika. Wszystkie żądania tworzenia obiektów będą obsługiwane za pośrednictwem menedżera puli.

Pule zasobów są konfigurowane i obsługiwane na podstawie komponentu. Pula składa się z homogenicznych obiektów, które mają ten sam identyfikator CLSID. Jedynym wyjątkiem są obiekty transakcyjne, dla których utrzymywane są podpul zawierających obiekty powiązane z transakcją w trakcie oczekiwania na realizację transakcji.

Po uruchomieniu aplikacji pula zostanie wypełniona do minimalnego poziomu, który został określony administracyjnie, o ile tworzenie obiektu zakończy się pomyślnie. Żądania klientów dotyczące składnika są realizowane na zasadzie "kto pierwszy, ten lepszy" z dostępnej puli. Jeśli nie są dostępne żadne obiekty w puli i pula nie jest jeszcze na określonym poziomie maksymalnym, zostanie utworzony i aktywowany nowy obiekt dla klienta.

Gdy pula osiągnie maksymalny poziom, żądania klientów są kolejkowane i otrzymają pierwszy dostępny obiekt z puli. Liczba obiektów, w tym aktywowanych i dezaktywowanych, nigdy nie przekroczy maksymalnej wartości puli. Żądania tworzenia obiektów wygasną po okresie określonym przez administrację, dzięki czemu można kontrolować czas, jaki klienci będą czekać na utworzenie obiektu. Po awarii przekroczenia limitu czasu klient zwróci błąd E_TIMEOUT z CoCreateInstance.

Jeśli to możliwe, com+ podejmie próbę ponownego użycia obiektu po jego wydaniu przez klienta, dopóki pula nie osiągnie maksymalnego poziomu. Obiekt jest odpowiedzialny za monitorowanie jego stanu w celu określenia, czy można go użyć ponownie i powinien zwrócić odpowiednią wartość dla IObjectControl::CanBePooled.

Po utworzeniu obiektu w puli jest on zintegrowany z większym obiektem, który będzie zarządzać cyklem życia obiektu. Obiekt zewnętrzny wywołuje metody IObjectControl w odpowiednim czasie w cyklu życia obiektu w następujący sposób:

  • Metoda Activate jest wywoływana za każdym razem, gdy obiekt jest zwracany do klienta, aktywowany w określonym kontekście.
  • Metoda Dezaktywuj jest wywoływana za każdym razem, gdy obiekt jest zwalniany przez klienta lub w przypadku obiektu aktywowanego przez JIT, gdy jest dezaktywowany.
  • Metoda CanBePooled jest wywoływana za każdym razem, gdy obiekt ma zostać zwrócony do puli ogólnej. Jeśli obiekt wykryje, że jakiś zasób wielokrotnego użytku jest w złym stanie, powinien zwrócić false dla tej metody, a menedżer puli odrzuci obiekt.

Obiekt nie musi implementować IObjectControl. Jeśli tak nie jest, wystąpienia będą zawsze używane ponownie, dopóki nie zostanie osiągnięty maksymalny poziom puli.

Aby uzyskać szczegółowe informacje na temat konfigurowania składników do wspólnego użytku, zobacz Konfigurowanie składnika do wspólnego użytku.

Ciągi konstruktorów obiektów COM+

Kontrolowanie cyklu życia obiektu i stanu

Poprawa wydajności dzięki pulowaniu obiektów

Zarządzanie pulą obiektów transakcyjnych

Wymagania dotyczące obiektów możliwych do gromadzenia w puli