2012-10-27 9 views
11

WinRTのバックグラウンドタスクのCPU使用量のクォータは1秒です。ロック画面にある場合は2秒です。問題は、このCPU使用量を正確に測定する方法です。私のコードがこの2秒のクォータで実行されているかどうかを知りたいですか?私は、タスクの実行の前後にDateTime.Nowを使用して推測する正しいアプローチではありません。バックグラウンドタスクについて
MSDNの記事: Supporting your app with background tasksバックグラウンドタスクでCPU使用率を正確に測定する方法は?

+0

また、i5がARMベースのプロセッサよりも多くのコードを実行できると推測します...私のアプリケーションが2秒以上かかることがないかどうかをテストするには最も遅いプロセッサが必要でしょうか? – GameScripting

+0

良いことに、そうだとすれば、ローエンドのARMタブレットでのバックグラウンド作業のために、Core-i7のクローズドデスクトップよりも計算能力がはるかに低くなっています。 –

+0

Webワーカーはバックグラウンドタスクと同じですか?イメージを取得してキャッシュしたいのですが、2秒間は処理時間が足りないように見えます(特に、作画して保存したいからです)。 – kamranicus

答えて

0


が、私は同じ問題を抱えていました。

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

平均的な時間が必要な場合は、アプリでバックグラウンドアクティビティをカウントし、それによって時間全体を分けることで、平均的な時間が得られます。

+0

これは私がCPU使用量を測定するために今すぐできることだと思います。ありがとうございます。 –

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上でのKernel32.dllでKERNELBASE.DLLを交換してください。

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

コールGetProcessTimes開始時には、long startTime = KernelTime + UserTimeを計算します。終了したら、GetProcessTimesを呼び出し、(KernelTime + UserTime) - startTimeを計算すると、データが取得されます。測定単位はTimeSpanの場合と同様100nsのダニです。

関連する問題