使用 WinDbg 分析 C# 程序高 CPU 占用问题
标 题:使用 WinDbg 分析 C# 程序高 CPU 占用问题
作 者:WPFDevelopersOrg - 驚鏵
原文链接[1]:https://github.com/WPFDevelopersOrg/WPFDevelopers
码云链接[2]:https://gitee.com/WPFDevelopersOrg/WPFDevelopers
1. 打开任务管理器找到我们自己的程序,转储文件 crash.DMP

2. 打开 WinDbg

3. 打开 crash.DMP 文件


4. 执行以下命令:
!runaway
从上图能看出来线程 0 占用 CPU 最高,通过命令切换到线程 0s
~0s
继续输入 k 查看更详细的堆栈信息
k
再次输入 !eestack 查看混合堆栈
!eestack
从 !eestack 的输出可以看到线程 0 的完整堆栈信息,线程 0 正卡在 Console.ReadLine() 方法的锁操作上。
5. 所以定位到出现问题的代码就在 Program.Main() 应用程序主入口处
while (true)
{
var input = Console.ReadLine();
if (input?.ToLower() == "exit")
break;
if (!string.IsNullOrEmpty(input))
{
Console.WriteLine($"处理命令: {input}");
}
}上述内容展示了在用户电脑上遇到程序问题时,如何使用 WinDbg 进行 CPU 占用过高的分析。通过分析 Dump 文件,我们可以定位程序异常导致高 CPU 占用的原因。然而,在编码过程中,如果遇到类似的性能问题,借助 Visual Studio 的性能探查器(Performance Profiler)就能快速发现瓶颈和潜在问题,帮助开发者更高效地定位和解决问题。
GitHub 源码地址[3]
Gitee 源码地址[4]
参考资料
[1]
原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers
[2]码云链接: https://gitee.com/WPFDevelopersOrg/WPFDevelopers
[3]GitHub 源码地址: https://github.com/WPFDevelopersOrg/WPFDevelopers/blob/dev/src/WPFDevelopers.Shared/Styles/Styles.DataGrid.xaml
[4]Gitee 源码地址: https://gitee.com/WPFDevelopersOrg/WPFDevelopers/blob/dev/src/WPFDevelopers.Shared/Styles/Styles.DataGrid.xaml



691

被折叠的 条评论
为什么被折叠?



