プロファイル コレクションが想定どおりに動作しない状況は複数あります。
- 内部エラーのため、プロファイルの収集に失敗します。この場合、
ProfilingResult
API はエラーについて通知します。 - レート制限により、プロファイルの収集が失敗します。詳細については、レート制限の仕組みをご覧ください。
- プロファイルの収集は成功しますが、アプリにすぐに通知されません。これは、長いプロファイル収集中にアプリがクラッシュした場合に発生することがあります。アプリが閉じると、システムは自動的にプロファイルを停止して保存します。アプリは、再起動して
ProfilingManager
で汎用リスナーを登録すると、収集されたプロファイルについて通知されます。
レート制限の仕組み
ProfilingManager
には、個々のアプリとシステム全体の両方のレート制限が含まれています。レート制限により、プロファイリング セッション全体で多くのリソースが使用されるため、アプリが多くのプロファイルを記録してシステム リソースを過剰に使用することを防ぎます。
アプリとシステムの両方のレート リミッターは、収集された各タイプのプロファイルにコストを割り当てます。これは、一部のプロファイルは他のプロファイルよりもリソースを大量に消費するためです。アプリの制限機能は、アプリの合計費用に基づいて、個々のアプリが記録できる量を制御します。ただし、システム リミッターは、すべてのアプリによって記録されたすべてのプロファイルの合計費用を制御します。
レート制限は、各アプリが使用できる合計費用を設定します(この費用はすべてのアプリで同じです)。各プロファイルは、タイプに応じてこの合計費用のうちの一部を使用します。
レート制限機能では、次の 3 つの期間が使用されます。
- 1 時間あたりの上限: 1 時間あたりの上限費用を設定できます。
- 1 日あたり: 1 日あたりの上限費用が設定されています。
- 週単位: 1 週間あたりの最大費用が設定されています。
レート制限機能は、これらの各期間内で使用できる合計費用を設定します。たとえば、アプリが 1 時間あたり X 個、1 日あたり Y 個、1 週間あたり Z 個のプロファイルを記録できるとします。アプリがこれらの期間のいずれかで上限に達すると、以降のプロファイル リクエストは ERROR_FAILED_RATE_LIMIT_PROCESS
エラーになります。
これらの期間は、システムレベルのレート制限でも同様に機能します。ただし、システム レート制限はすべてのアプリで共有されるグローバルな制限です。この上限は個々のアプリの割り当てとは別に設定されますが、すべてのプロファイルが同じ時間、日、週の期間を使用してこの上限に貢献します。このグローバル上限に達すると、ERROR_FAILED_RATE_LIMIT_SYSTEM
エラーが返されます。