有时代码可以利用设备驱动程序直到系统无响应。
最近我优化了一段WIN32/VC++代码,导致系统几乎无响应。但是,CPU 使用率非常低。原因是 1000 次 GDI 对象(钢笔、画笔等)的创建和销毁。一旦我重构代码以仅创建一次所有对象 - 系统再次变得响应。
这让我想到了一个问题:对于给定的程序/功能/代码行,是否有一种方法可以测量设备驱动程序(GPU/磁盘/等)的 CPU/IO 使用情况?
最佳答案
您可以使用 SysInternals Utilities 中的各种工具(现在是 Microsoft 产品,请参阅 http://technet.microsoft.com/en-us/sysinternals/bb545027)在开始之前给出一个基本概念。在您的情况下,进程浏览器 (procexp) 和进程监视器 (procmon) 执行得不错。它们可用于让您在进行分析钻取之前基本了解缓慢的类型。
然后你可以使用xperf http://msdn.microsoft.com/en-us/performance/default向下钻取。通过正确的设置,此工具可以将您带到导致缓慢的确切功能,而无需将分析代码注入(inject)您现有的程序。已经有一个 PDC 视频在谈论如何使用它 http://www.microsoftpdc.com/2009/CL16我强烈推荐这个工具。根据我自己的经验,最好先使用 procexp/procmon 进行观察,然后再使用 xperf 锁定您的嫌疑人,因为如果不以巧妙的方式进行过滤,xperf 会生成大量信息。
在某些涉及锁定争用的困难情况下,Windows 调试工具 (windbg) 会非常方便,并且有专门的书籍介绍它的用法。这些书通常讨论挂起检测,这里有很多技术也可用于检测速度慢。 (例如!失控)
关于c++ - 测量由我的程序引起的设备驱动程序 CPU/IO 利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618826/