Performance 性能计数器的性能命中率是多少

Performance 性能计数器的性能命中率是多少,performance,performancecounter,Performance,Performancecounter,当考虑使用性能计数器作为我公司的.NET网站时,我想知道使用它们的开销有多大 我是想让我的站点不断更新计数器,还是我最好只在测量时进行更新?我发现,对于大多数应用程序来说,速度并没有那么慢。我不会把它放在一个紧密的循环中,或是一秒钟被称为数千次的东西 其次,我发现以编程方式创建性能计数器的速度非常慢,因此请确保您事先创建它们,而不是在代码中创建它们。更新时对性能的影响可以忽略不计。Microsoft的目的是始终向性能计数器写入数据。监视(或捕获)这些性能计数器将导致性能下降。因此,只有当您使用p

当考虑使用性能计数器作为我公司的.NET网站时,我想知道使用它们的开销有多大


我是想让我的站点不断更新计数器,还是我最好只在测量时进行更新?

我发现,对于大多数应用程序来说,速度并没有那么慢。我不会把它放在一个紧密的循环中,或是一秒钟被称为数千次的东西


其次,我发现以编程方式创建性能计数器的速度非常慢,因此请确保您事先创建它们,而不是在代码中创建它们。

更新时对性能的影响可以忽略不计。Microsoft的目的是始终向性能计数器写入数据。监视(或捕获)这些性能计数器将导致性能下降。因此,只有当您使用perfmon之类的工具来捕获数据时


实际上,性能计数器对象只会产生“在测量时进行测量”的效果。

我同意famoushamsandwich,但我要补充一点,只要采样率合理(5秒或更长),并且您监控一组合理的计数器,那么测量的影响也可以忽略不计(在大多数情况下)性能计数器只是指向共享内存(又称内存映射文件)中4/8字节的指针,因此其成本与访问int/long变量的成本非常相似。

设置性能计数器的开销通常不足以令人担心(设置共享内存区域和一些.NET对象,以及CLR开销,因为CLR实际上为您进行管理)。这里我指的是PerformanceCounter之类的类

注册性能计数器的开销可能会非常缓慢,但通常不会引起关注,因为它在安装时只发生一次,因为您希望更改计算机范围内的状态。与您所做的任何复制相比,它都会显得微不足道。这通常不是您希望在运行时执行的操作。这里我指的是PerformanceCount埃林斯泰勒

更新性能计数器的开销通常归结为在共享内存上执行联锁操作的成本。这比正常内存访问慢,但是一个处理器原语(这就是它在整个内存子系统(包括缓存)中获得原子操作的方式)一般来说,代价不高。它可能是正常内存操作的10倍,可能取决于更新和跨线程和CPU的争用。但是考虑到这一点,与原子更新的跨进程通信相比,不可能比联锁操作做得更好,也没有锁。这里我指的是PerformanceCounter.Increment和类似的方法

读取性能计数器的开销通常是从共享内存中读取。正如其他人所说,您希望在合理的时间段内进行采样(就像任何其他采样一样),但只要考虑PerfMon并尝试将采样保持在人的范围内(考虑秒而不是毫秒),就不会有任何问题

最后,体验的吸引力:性能计数器是如此轻量级,以至于它们在Windows中无处不在,从内核到驱动程序再到用户应用程序。微软内部依赖于它们


建议:性能计数器的真正问题是理解的学习曲线(这是中等的)和衡量正确事物的曲线(看起来很容易,但往往会出错)。

我已经测试了很多

在一台旧的compaq 1Ghz 1处理器机器上,我能够创建大约10000个计数器,并远程监控它们大约20%的CPU使用率。这些不是自定义计数器,只是检查CPU或其他什么

基本上,您可以在任何一台像样的较新机器上监视所有计数器,并且影响很小


对象的实例化可能需要很长时间,从几秒钟到几分钟。我建议您对收集的所有计数器执行多线程操作,否则您的应用程序将永远坐在那里创建这些对象。不确定MS在创建对象后会做什么,这需要很长时间,但您可以在sa中使用1000个线程对1000个计数器执行此操作给我时间,你可以用一个计数器和一个线程来做这件事。

谢谢。你能给我指一些数字吗?我很好奇他们做得有多好……我从来没有看过演示,但我没有理由怀疑它。这很简单,可以在应用程序中进行验证。您好,我是伯灵顿。通过“监控……这会导致性能下降”您的意思是说,在更新/发布计数器的过程中,还是在监视计数器的过程中,会看到性能下降?我对指南的解释是前者。您测试过过程级指标吗?我发现这会产生比我想要的更多的开销。我正在为大约30个不同的PID添加4个计数器,并看到monitoring应用程序占用大约20%的cpu。没关系,这是愚蠢的防病毒软件,一切都很好。切换到异步方法来创建计数器是个好主意