注意-这个问题是后续查找进度无限循环的模式窗体? 。 有一次,我学会了如何调试问题,它提出了这个问题。
我有一种罕见的疾病导致我的WPF应用程序消耗最大的CPU和图形用户界面无响应。 基于它显然正在运行的CPU使用率(未在外部阻断)
使用Process Explorer中,我可以看到在堆栈跟踪几乎所有的时间花在内部功能wpfgfx_v0400.dll
,主要是在功能Utility_PolygonBounds
或Utility_PathGeometryBounds
。 我不知道这意味着什么。
下面是一个例子堆栈跟踪:
ntoskrnl.exe!KeSynchronizeExecution+0x5c16
ntoskrnl.exe!KeWaitForMutexObject+0x1070
ntoskrnl.exe!KeWaitForMutexObject+0x9ee
ntoskrnl.exe!KeWaitForMutexObject+0x1c9
ntoskrnl.exe!ExWaitForRundownProtectionRelease+0x763
ntoskrnl.exe!KeWaitForMutexObject+0x2c10
ntoskrnl.exe!KeSynchronizeExecution+0x2e1c
wpfgfx_v0400.dll!MilUtility_PolygonBounds+0xb0d
wpfgfx_v0400.dll+0xc860
通过反复刷新堆栈跟踪我可以看到,90%的时间被消耗在这些wwpfgfx ......功能之一。
我在任何WPF相关的代码/代码隐藏创下了无数的断点,其中没有被击中。 此外,如果在C#调试器我手动“休息”时,CPU使用率仍然很高,而且我可以在非托管wpf_gfx东西继续运行 Process Explorer中看到。 所以现在看来似乎从未返回到应用程序的自己的代码。
如何调试或弄清楚到底是怎么回事错在这里?
注:这是在评论提出,“使用阴影效果,阴影,特别是在窗户边框,可能会导致这种情况的想法是,当一个影子(或者类似的效果)被周围的边缘绘制,它打破了矩形计算和窗口不断重绘,即使不是必需的。CPU使用率非常高。” 但我的应用程序没有使用这些效果,即使这说明什么似乎发生。