11

WinRT のバックグラウンド タスクの CPU 使用率クォータは 1 秒、またはロック画面の場合は 2 秒です。問題は、この CPU 使用率を正確に測定する方法です。コードがこの 2 秒のクォータで実行されるかどうかを知りたいですか? タスクの実行前後に DateTime.Now だけを使用するのは正しいアプローチではないと思います。
バックグラウンド タスクに関する MSDN の記事: バックグラウンド タスク
によるアプリのサポート

4

2 に答える 2

0

私も同じ問題を抱えていました。

を起動するTask Managerと、タブの下に、App historyさまざまなアプリによるリソース使用量の統計が表示されます。それらの1つはですCPU Time。問題は、平均ではなく、合計 CPU 使用時間しか表示されないことです。

平均時間が必要な場合は、アプリでバックグラウンド アクティビティのカウントを保持し、全体の時間をそれで割ると、平均時間が得られます。

于 2012-12-27T23:54:35.153 に答える
0

GetProcessTimes WinAPIを使用しました。

ドキュメントには「デスクトップ アプリのみ」と記載されていますが、技術的には、電話にも存在します。

    [DllImport( "KERNELBASE.DLL", SetLastError = true )]
    static extern IntPtr GetCurrentProcess();

    // NB! Undocumented API, won't pass marketplace checks.
    [DllImport( "KERNELBASE.DLL", SetLastError = true )]
    [return: MarshalAs( UnmanagedType.Bool )]
    static extern bool GetProcessTimes( IntPtr hProcess, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime );

PC で KERNELBASE.DLL を Kernel32.dll に置き換えます。

これはマーケットプレイスの認定には合格しませんが、バックグラウンド タスクのベンチマークを行うには十分なはずです。

開始時に GetProcessTimes を呼び出し、 calculate long startTime = KernelTime + UserTime。終了したら GetProcessTimes を呼び出し、 calculate( KernelTime + UserTime ) - startTimeを実行すると、データが取得されます。測定単位は、TimeSpan と同様に 100ns ティックです。

于 2016-04-30T17:55:28.893 に答える