我刚刚完成了关于如何创建性能计数器并更新计数器值的this article。但我对Windows性能计数器的工作范例感到有些困惑。假设有2个程序A和B,A想通过一些性能计数器知道B的性能。以下哪种情况是正确的?
B在Windows中创建/注册一些性能计数器,B负责更新计数器的值。 A可以是系统 perfmon.exe 。 A没有主动探测B的执行状态。 A只需检查寄存器计数器并获取由B提供和更新的值。即使没有A,B仍然总是更新其注册的性能计数器。但这不是B表现的某种负担吗?
主动探测B的执行状态并计算出性能计数器值。在这个范例中,B没有任何额外的责任。
简而言之,谁负责创建和更新性能计数器?正在测量其性能的目标程序?或者测量对象程序性能的主题程序?对于程序A,它是一个探测场景吗?或只是一个阅读场景?
非常感谢。
答案 0 :(得分:1)
Performance Counters可能是一个有趣的问题,但您的总体目标是什么?您是否有兴趣了解如何让程序运行得更快?
如果没有,请忽略这个答案。
如果是这样,那么有一种观点认为性能计数器的存在是为了计算你想要测量的东西。此外,它表示测量可以很好地查看您修复的内容是否有所不同,但找出性能问题(瓶颈)的确切位置并没有多大帮助。
如果存在瓶颈(并且可能存在)如果被移除会导致时间减少一些百分比(例如30%),那么关于它是什么的最大,最明显的线索是
如果您对其正在进行的操作采取10个随机时间样本,那么对于这些样本中的3个中的3个(或多或少),您将“在执行瓶颈时捕获它”。注意一件事 - 我们问“什么”。我们并没有问“多少钱。”
这需要时间,这使得它很容易找到。调试很难 - 您必须跟踪执行并发现它出错。找到瓶颈很容易 - 他们将自己暴露给你。
您无需进行测量即可找到。一旦找到,就可以测量。 Here's more on that subject.