Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Buforowanie obiektów może być niezwykle skuteczne w pewnych okolicznościach, co może prowadzić do znacznego wzrostu wydajności. Ogólna idea efektywnego ponownego wykorzystania obiektów polega na zgromadzeniu jak największej liczby zasobów, oddzieleniu procesu inicjalizacji od rzeczywistego wykonywanego zadania, a następnie administracyjnym dostosowaniu właściwości puli do rzeczywistego sprzętu w momencie wdrażania. Oznacza to, że należy postępować zgodnie z następującymi krokami:
- Napisz obiekt, aby wydzielać kosztowne inicjowanie i pozyskiwanie zasobów, które jest wykonywane dla dowolnego klienta jako warunek wstępny do wykonywania właściwej pracy na rzecz klienta. Twórz rozbudowane konstruktory obiektów, aby gromadziły jak najwięcej zasobów, co sprawi, że będą one przechowywane przez obiekt i natychmiast dostępne, gdy klienci uzyskają obiekt z puli.
- Administracyjnie skonfiguruj pulę, aby uzyskać najlepszą równowagę w dostępnych zasobach sprzętowych, zwykle zamieniając pamięć przeznaczoną na utrzymanie puli o określonym rozmiarze w zamian za szybszy dostęp klienta i korzystanie z obiektów. W pewnym momencie pulowanie osiągnie korzyści malejących przychodów i można uzyskać wystarczającą efektywność, ograniczając możliwe użycie zasobów przez konkretny składnik.
Wykonywanie rzeczywistej pracy lub uzyskiwanie zasobów
Jeśli masz komponent, którego klienci będą używać krótko i w szybkim tempie, gdzie znaczna część czasu użycia obiektu jest poświęcana na pozyskiwanie zasobów lub inicjalizację przed wykonaniem określonej pracy dla klienta, istnieje duże prawdopodobieństwo, że napisanie komponentu do korzystania z puli obiektów przyniesie Ci znaczną korzyść.
Składnik można napisać tak, aby w konstruktorze obiektu wykonać jak najwięcej czasochłonnej pracy, która jest jednolita dla wszystkich klientów, uzyskiwanie jednego lub kilku połączeń, uruchamianie skryptów, pobieranie danych inicjowania z plików lub przez sieć itd. Ma to wpływ na łączenie każdego takiego zasobu. Łączysz kombinację zasobów i stanu ogólnego niezbędnego do wykonania pewnej pracy.
W takiej sytuacji, gdy klienci uzyskują obiekt z puli, mają te zasoby natychmiast dostępne. Zazwyczaj obiekt będzie używany do wykonywania niewielkiego zadania, przesuwania lub pobierania danych, a następnie obiekt wywołuje IObjectContext::SetComplete lub IObjectContext::SetAbort i zwraca. W przypadku szybkich wzorców użycia, takich jak ten, agregacja zapewnia doskonałe korzyści wydajnościowe. Można w pełni wykorzystać prostotę bezstanowego modelu automatycznego programowania transakcji, ale osiągnąć wydajność na równi z tradycyjnymi składnikami stanowymi.
Jeśli jednak klienci używają obiektu przez długi czas za każdym razem, gdy go wywołają, używanie wspólnej puli zasobów ma mniej sensu. Przewaga szybkości, którą zyskujesz, jest marginalna w miarę wzrostu czasu użycia w stosunku do czasu inicjowania. Uzyskujesz malejące zwroty, które mogą nie uzasadniać kosztu pamięci niezbędnej do przechowywania puli aktywnych obiektów.
Udostępnianie kosztów między wieloma klientami
Odmianą faktoryzacji inicjalizacji jest to, że można użyć pulowania w celu statystycznego amortyzowania kosztów pozyskiwania zasobów. Jeśli raz poniesiesz koszt nabywania lub inicjowania, a potem będziesz ponownie używał obiektu, rozłożysz ten koszt na wszystkich klientów korzystających z obiektu w okresie jego istnienia. Ciężki czas budowy jest naliczany tylko raz na obiekt.
Wstępne przydzielanie obiektów
Jeśli określisz minimalny rozmiar puli inny niż zero, to minimalna liczba obiektów zostanie utworzona i umieszczona w puli po uruchomieniu aplikacji, przygotowana dla wszystkich klientów, którzy wywołują aplikację.
Zarządzanie użyciem zasobów za pomocą zarządzania pulą
Możesz użyć maksymalnego rozmiaru puli, aby dokładnie zarządzać sposobem korzystania z zasobów. Jeśli na przykład masz licencję na określoną liczbę połączeń z bazą danych, możesz kontrolować liczbę otwartych połączeń w dowolnym momencie.
Jeśli wziąć pod uwagę wzorce użycia klienta, właściwości użycia obiektów i zasobów fizycznych, takich jak pamięć i połączenia, prawdopodobnie znajdziesz optymalny punkt równowagi podczas dostrajania wydajności. Obiekty połączeniowe będą przynosić malejące korzyści po pewnym punkcie. Możesz określić wymagany poziom wydajności i zrównoważyć to, jakie zasoby są niezbędne do osiągnięcia.
Aby ułatwić dostrajanie wydajności podczas konfigurowania puli obiektów, można monitorować statystyki obiektów dotyczące komponentów w aplikacji. Aby uzyskać szczegółowe informacje, zobacz Monitorowanie statystyk obiektów.
Zwiększanie wydajności składników JIT-Activated
Buforowanie obiektów działa bardzo dobrze z usługą aktywacji COM+ just-in-time. Przez łączenie obiektów, które są aktywowane JIT, można przyspieszyć reaktywowanie obiektów. Można czerpać korzyści z utrzymania otwartego kanału dzięki aktywacji JIT, jednocześnie ograniczając koszty ponownej aktywacji. W tym przypadku można użyć buforowania, aby określić ilość pamięci, którą chcesz przydzielić do obiektów, które mają aktywne odwołania.
Najprawdopodobniej będziesz łączył składniki aktywowane w trybie JIT, gdy są one transakcyjne. Buforowanie obiektów jest zoptymalizowane pod kątem obsługi komponentów transakcyjnych. Aby uzyskać więcej informacji, zobacz Pooling Transactional Objects.
Tematy pokrewne