Существует ряд ситуаций, когда сбор профиля может пойти не так, как ожидалось:
- Сбор профиля не удался из-за внутренней ошибки. В этом случае API
ProfilingResult
сообщит вам об ошибках. - Сбор профиля невозможен из-за ограничения скорости. Подробнее см. в разделе «Как работает ограничение скорости».
- Сбор профилей проходит успешно, но приложение не получает немедленного уведомления. Это может произойти, если приложение аварийно завершает работу во время длительного сбора профилей. Если приложение закрывается, система автоматически останавливает работу и сохраняет профиль. Приложение получает уведомление о собранном профиле при перезапуске и регистрирует общего прослушивателя в
ProfilingManager
.
Как работает ограничение скорости
ProfilingManager
включает в себя ограничитель скорости как для отдельных приложений, так и для всей системы. Ограничитель скорости предотвращает чрезмерное использование системных ресурсов приложениями за счёт записи слишком большого количества профилей, поскольку полный сеанс профилирования требует значительных ресурсов.
Ограничители скорости как приложения, так и системы назначают стоимость для каждого типа собираемых профилей, поскольку некоторые профили требуют больше ресурсов, чем другие. Ограничитель скорости приложения контролирует объём записи, доступный для отдельного приложения, исходя из его общей стоимости. Однако системный ограничитель контролирует общую стоимость всех профилей, записанных всеми приложениями.
Ограничитель скорости устанавливает общую стоимость, которую может использовать каждое приложение (эта стоимость одинакова для всех приложений). Каждый профиль использует часть этой общей стоимости в зависимости от своего типа.
Ограничитель скорости использует три периода времени:
- В час: существует максимальная разрешенная стоимость за час.
- В день: существует максимальная разрешенная стоимость в день.
- В неделю: существует максимальная разрешенная стоимость за неделю.
Ограничитель скорости устанавливает общую стоимость, которую можно использовать в течение каждого из этих периодов. Например, приложению может быть разрешено записывать X профилей в час, Y в день и Z в неделю. Если ваше приложение достигнет лимита в любой из этих периодов, последующие запросы профилей приведут к ошибке ERROR_FAILED_RATE_LIMIT_PROCESS
.
Эти временные интервалы работают аналогично системному ограничению скорости. Однако системный ограничитель скорости — это глобальный лимит, общий для всех приложений. Этот лимит устанавливается отдельно от квот отдельных приложений, но каждый профиль вносит в него свой вклад, используя одни и те же часовые, дневные и еженедельные периоды. При достижении этого глобального лимита возникает ошибка ERROR_FAILED_RATE_LIMIT_SYSTEM
.