2

我刚刚读完这篇关于如何创建性能计数器并更新计数器值的文章。但我对 Windows 性能计数器的工作模式有点困惑。假设有2个程序A和B,A想通过一些性能计数器了解B的性能。以下哪个场景是正确的?

  • B 在 Windows 中创建/注册一些性能计数器,B 负责更新计数器的值。A 可能是系统perfmon.exe。A 没有主动探测 B 的执行状态。A 只需检查注册的计数器并获取由 B 提供和更新的值。即使没有 A,B 仍然总是更新其注册的性能计数器。但这对B的表现来说不是某种负担吗?

  • A 主动探测 B 的执行状态并计算性能计数器值。在这个范例中,B 没有任何额外的负担。

    简而言之,谁负责创建和更新性能计数器?正在测量其性能的目标程序?还是测量目标程序性能的主题程序?对于程序A,它是一个探测场景吗?还是只是一个阅读场景?

非常感谢。

4

1 回答 1

1

性能计数器可能是一个有趣的问题,但您的总体目标是什么?您是否有兴趣了解如何使程序运行得更快?

如果不是,请忽略这个答案。

如果是这样,那么有一种观点认为,性能计数器的存在是为了计算你想要测量的东西。此外,它说测量可以很好地查看您修复的内容是否有所作为,但对于找出性能问题(瓶颈)的确切位置并没有太大帮助。

如果存在瓶颈(并且可能存在),如果移除会导致时间减少一定百分比(如 30%),那么关于它是什么的最大、最明显的线索就是

  • 程序在这 30% 的时间里在做什么?

如果您对它正在做的事情进行 10 个随机时间样本,那么在 10 个样本中的 3 个(或多或少)中,您将“在做瓶颈的行为中抓住它”。注意一件事——我们在问“什么”。我们不是在问“多少”。

它需要时间这一事实使得它很容易找到。调试很困难——你必须跟踪执行并发现它出错了。找到瓶颈很容易——它们会暴露给你。

您无需测量即可找到。找到后,就可以测量了。这里有更多关于这个主题的内容。

于 2010-06-24T00:49:20.027 回答