给定一个特定的正在运行的进程,有没有办法找出哪个硬件元素是其当前运行的瓶颈?换句话说,其当前的计算是 CPU 密集型、GPU 密集型、内存密集型、IO 密集型等?
适用于 Windows XP 的答案是更好的选择,但欢迎所有答案。
编辑:我正在考虑那些占用绝大多数系统资源的进程;因此,能够帮助我找到整个系统当前瓶颈(例如,哪个元素正在最努力地工作,而其他元素正在休息)的解决方案也很好。
编辑2:有人问过我这个问题,我的回答是
打开任务管理器并选择查看应用程序的页面错误 - 非常高的计数表明您没有足够的物理内存。检查 CPU 利用率 - 如果它持续处于 100%,则表明它可能对于此实时应用程序来说速度不够快。
我本来会这么做,但感觉有点业余,所以我正在寻找更精确、更完整的方法来识别罪犯。
答案1
您可以使用 Microsoft XPERF 工具检查堆栈并查找瓶颈。您只能在 Vista/7(或 Server 2008)上查看结果,但可以在 XP 上运行配置文件工具。 猪能飞有一些关于使用 XPERF 进行堆栈遍历的非常好的文章。
我们用它来查找启动速度的瓶颈,并最终向公司展示证据以删除一些在启动时占用过多磁盘 IO 的工具。
答案2
您需要使用分析器。您可能还需要访问程序的源代码,或者至少访问调试符号。