当考虑使用性能计数器作为我公司的基于 .NET 的站点时,我想知道使用它们的开销有多大。
我是否想让我的网站不断更新其计数器,或者我最好只在测量时更新?
设置性能计数器的开销通常不够高,无需担心(设置共享内存区域和一些 .NET 对象,以及 CLR 开销,因为 CLR 实际上为您进行管理)。这里我指的是像 PerformanceCounter 这样的类。
注册性能计数器的开销可能相当慢,但通常不是一个问题,因为它打算在设置时发生一次,因为您想要更改机器范围的状态。与你所做的任何复制相比,它都会相形见绌。这通常不是您想要在运行时执行的操作。这里我指的是PerformanceCounterInstaller。
更新性能计数器的开销通常归结为在共享内存上执行互锁操作的成本。这比正常的内存访问慢,但它是一个处理器原语(这就是它如何在整个内存子系统(包括缓存)中进行原子操作)。一般来说,这个成本并不高,不用担心。它可能是正常内存操作的 10 倍,甚至可能更糟,具体取决于更新以及线程和 CPU 之间的争用情况。但考虑到这一点,对于具有原子更新的跨进程通信来说,实际上不可能比互锁操作做得更好,并且不持有锁。这里我参考PerformanceCounter.Increment和类似的方法。
读取性能计数器的开销通常是从共享内存读取。正如其他人所说,您希望在合理的时间段内进行采样(就像任何其他采样一样),但只要考虑 PerfMon 并尝试将采样保持在人类规模上(考虑秒而不是毫秒),您可能不会有任何问题。
最后,对体验的诉求:性能计数器是如此轻量级,以至于它们在 Windows 中随处可见,从内核到驱动程序再到用户应用程序。微软在内部依赖它们。
建议:性能计数器的真正问题是理解的学习曲线(中等)和衡量正确事物的学习曲线(看起来很容易,但经常会出错)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)