c++ - 测量由我的程序引起的设备驱动程序 CPU/IO 利用率

标签 c++ windows debugging device-driver measurement

有时代码可以利用设备驱动程序直到系统无响应。

最近我优化了一段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/

相关文章:

c++ - gcc 和 clang 是否没有正确推断模板别名类型?

c++ - C/C++ 中 Delphi 类型的类比

c++ - 解析 Windows Minidump 中的符号

c# - 在调试器中跳过一个方法,但之后继续正常调试

php - 使用 Eclipse 调试 PHP?

c++ - std::cout 的奇怪问题

php - 在 Windows Server 2008 IIS 7 上从 PHP 5.2.17 升级到 5.2.6

c++ - OpenCV3.1 中的 imwrite 不起作用

c++ - JNI C++ 调试技术?

c++ - 类型结果之间的意外差异