質問

約30分後に私のWPFアプリケーションが高いCPU使用率を使用し、アプリケーションを中断してどのコードが高いCPU使用率を費やしたかを調べましたが、何も得られませんでした。

Visual Studio 2008は現在実行中のコードを表示できませんが、「コールスタック」でこれを見つけました。パネル:

[In a sleep, wait, or join] 
mscorlib.dll!System.Threading.WaitHandle.WaitAny(System.Threading.WaitHandle[] waitHandles, int millisecondsTimeout, bool exitContext) + 0x8f bytes 
System.dll!System.Net.TimerThread.ThreadProc() + 0x2f9 bytes    
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes   
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes    
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes   

これは何ですか? CPU使用率が高い場合、何が問題になりますか? CPU使用量を減らす方法

役に立ちましたか?

解決

「WPFのパフォーマンスプロファイリングツール」/ Visual Profileを使用して、CPU使用率が最も高いイベントを特定しました。 Tick(TimeManager.Tick())は、アプリの約40%のCPU使用率を取りました。その後、すべてのアニメーションコントロールを1つずつ削除し、最後に、ストーリーボードが約30分後にCPU使用率を増加させることがわかりました。

その後、フォームを変更しました:


calendarStoryboard.Begin(txtMessage, HandoffBehavior.Compose, true);

to


calendarStoryboard.Begin(txtMessage, HandoffBehavior.SnapshotAndReplace, true);

この問題は修正されました。 HandoffBehaviorの詳細については、msdnを参照してください:

http://msdn.microsoft .com / en-us / library / system.windows.media.animation.handoffbehavior.aspx

他のヒント

他のスレッドを確認する必要があります。スレッドを表示するトグルは、Visual Studioのデバッグメニューにあると思います。 " [スリープ中、待機中、または参加中]"は、スレッドが別のスレッドで操作を完了するのを待っているため、スレッドが何もできないことを意味します。

意図的かどうかにかかわらず、どこかで無限ループに陥っている可能性があります(意図的にアニメーションや何かのようなUIの連続的な再描画など)それが何であれ、スタックに表示される現在のスレッドにはありません。

問題を追跡するためのオプションがいくつかあります。 Visual Studio 2008のパフォーマンスウィザードから始めます。[分析]メニューにあります。

私はWPFの専門家ではありませんが、ここで示す呼び出しスタックはおそらくあなたの問題ではありません。そのスレッドは他の同期オブジェクトを待機しており、作業を行っていません。 VSが実行中のコードを表示できない理由は、ネイティブコードで待機しているためです(WaitAny()を呼び出すと、実際の待機を行うネイティブOSコンストラクトを呼び出すと思います)

WPFプロセスで実行中のCPU時間を消費している可能性のある他のスレッドはありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top