.net
C#
で書かれたアプリケーションは、100%のCPUを使用しています。アプリケーションは非常に大きく、大量のコードを含んでいるので、プロジェクトコード全体を提供することは不可能です。私は、スレッドが25%のCPU(1コア)を使用するアプリケーションのスレッドのスタックを取得しようとした、多くの場合、私はこれを得た:このコールスタックを持つスレッドは1つのコア の消費なぜ Hight CPU使用率.netアプリケーション
ntoskrnl.exe!KeSynchronizeExecution+0x2246
ntoskrnl.exe!KeWaitForMultipleObjects+0x135e
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeWaitForMutexObject+0x373
ntoskrnl.exe!KeStallWhileFrozen+0x1977
ntoskrnl.exe!_misaligned_access+0x13f9
ntoskrnl.exe!KeWaitForMultipleObjects+0x152f
ntoskrnl.exe!KeWaitForMultipleObjects+0xdd9
ntoskrnl.exe!KeWaitForMutexObject+0x373
ntoskrnl.exe!NtWaitForSingleObject+0xb2
ntoskrnl.exe!setjmpex+0x34a3
ntdll.dll!ZwWaitForSingleObject+0xa
KERNELBASE.dll!WaitForSingleObjectEx+0x98
clr.dll!GetMetaDataInternalInterface+0x25b1f
clr.dll!GetMetaDataInternalInterface+0x25ad3
clr.dll!GetMetaDataInternalInterface+0x25a92
clr.dll!GetMetaDataInternalInterface+0x39106
clr.dll!GetMetaDataInternalInterface+0x39a81
clr.dll!GetMetaDataInternalInterface+0x394ad
clr.dll!GetMetaDataInternalInterface+0x39979
clr.dll!GetMetaDataInternalInterface+0x398c1
clr.dll!GetMetaDataInternalInterface+0x3539a
clr.dll!ClrCreateManagedInstance+0x2747
KERNEL32.dll!BaseThreadInitThunk+0x22
ntdll.dll!RtlUserThreadStart+0x34
- は、誰も私に説明することができます私のCPU?
- 「KeSynchronizeExecution」とは何ですか?
- このような状況でCPU使用率が高くなるのを避けるにはどうすればよいですか?
このスタックトレースの品質は非常に悪いです。マシンの魂を見たい場合は、オペレーティングシステム用のPDBを入手することが非常に重要です。ツール]> [オプション]> [デバッグ]> [シンボル]> [Microsoft Symbol Servers]にチェックを入れ、シンボルキャッシュディレクトリを選択します。 Fwiw、このトレースはperf問題のまともなヒントを表示しません、WaitForSingleObjectEx()は、スレッドをブロックする同期関数です。あなたが高価なコードを見ることができるように、プロファイラを使うのが一番良い方法です。 –