Istnieje kilka sytuacji, w których zbieranie danych o profilach może nie przebiegać zgodnie z oczekiwaniami:
- Zbieranie profili kończy się niepowodzeniem z powodu błędu wewnętrznego. W takim przypadku interfejs API
ProfilingResult
poinformuje Cię o błędach. - Zbieranie informacji o profilu kończy się niepowodzeniem z powodu ograniczenia liczby żądań. Więcej informacji znajdziesz w artykule Jak działa ograniczanie liczby żądań.
- Zbieranie danych o profilu zakończy się powodzeniem, ale aplikacja nie otrzyma od razu powiadomienia.
Może się tak zdarzyć, jeśli aplikacja ulegnie awarii podczas długiego zbierania profili. Jeśli aplikacja zostanie zamknięta, system automatycznie zatrzyma i zapisze profil. Aplikacja jest informowana o zebranym profilu, gdy uruchamia się ponownie i rejestruje ogólny detektor zdarzeń za pomocą interfejsu
ProfilingManager
.
Jak działa ograniczanie liczby żądań
ProfilingManager
zawiera ogranicznik szybkości zarówno dla poszczególnych aplikacji, jak i całego systemu. Ogranicznik szybkości zapobiega wykorzystywaniu przez aplikacje zbyt dużej ilości zasobów systemowych przez rejestrowanie zbyt wielu profili, ponieważ pełna sesja profilowania zużywa dużo zasobów.
Zarówno aplikacja, jak i systemowe ograniczniki szybkości przypisują koszt do każdego typu zbieranego profilu, ponieważ niektóre profile wymagają większych zasobów niż inne. Ogranicznik aplikacji kontroluje, ile może nagrywać poszczególna aplikacja na podstawie łącznego kosztu. Ograniczenie systemowe kontroluje jednak łączny koszt wszystkich profili rejestrowanych przez wszystkie aplikacje.
Ogranicznik szybkości określa całkowity koszt, jaki może ponieść każda aplikacja (jest on taki sam w przypadku wszystkich aplikacji). Każdy profil wykorzystuje część tego całkowitego kosztu w zależności od swojego typu.
Ogranicznik szybkości korzysta z 3 okresów:
- Za godzinę: obowiązuje maksymalny koszt za godzinę.
- Dziennie: istnieje maksymalny koszt dozwolony dziennie.
- Tygodniowy: obowiązuje maksymalny koszt tygodniowy.
Ogranicznik szybkości określa całkowity koszt, który można wykorzystać w każdym z tych okresów. Na przykład aplikacja może mieć możliwość rejestrowania X profili na godzinę, Y na dzień i Z na tydzień. Jeśli w którymś z tych okresów aplikacja osiągnie limit, kolejne żądania profilu będą powodować ERROR_FAILED_RATE_LIMIT_PROCESS
błąd.
W przypadku ograniczeń szybkości na poziomie systemu te okresy działają podobnie. Ogranicznik szybkości systemu to jednak limit globalny, który jest wspólny dla wszystkich aplikacji. Ten limit jest ustawiany oddzielnie od limitów poszczególnych aplikacji, ale każdy profil ma na niego wpływ w tych samych okresach godzinowych, dziennych i tygodniowych. Jeśli ten globalny limit zostanie osiągnięty, pojawi się błąd ERROR_FAILED_RATE_LIMIT_SYSTEM
.