到 PerformanceCounter 还是编写自定义监控?

Posted

技术标签:

【中文标题】到 PerformanceCounter 还是编写自定义监控?【英文标题】:To PerformanceCounter or To Write Custom Monitoring? 【发布时间】:2009-01-13 18:39:24 【问题描述】:

我有一个跨多个线程运行框架实现的 Windows 服务。每个正在运行的实例都有几个共同点,我需要跟踪它们,例如,处理的项目数量、上次处理项目的时间等。在此基础监控数据之上,我想在框架以允许实现动态添加自己的监控数据。

我之前使用过 PerformanceCounters,虽然它们提供了不错的功能,但我发现创建和维护它们的代码非常繁琐,并且还存在与实例相关的陷阱的可能性(即,难以编码计数器实例名称、类别名称和计数器类型)。另外,我不确定是否可以在不编写大量代码的情况下提供简单的基本功能动态计数器创建。

有没有人使用 PerformanceCounters 实现过类似的东西?如果是这样,你会推荐它吗?如果没有,是否有人建议我可以轻松地将性能/运行状况监控数据写入不会引入 1)大量减速和 2)另一个故障点的介质?

谢谢,如有必要,我很乐意补充说明,因为我知道这有点含糊。

结论:

我最终实现了性能计数器。这有点像 PITA(呵呵),但我的老板真的很喜欢这个想法,现在我已经想通了,还不错。我希望通过一种更简单的方式来呈现分层数据,从而更容易配置一些东西。但这很好用,并且很难与内置界面争论。

【问题讨论】:

【参考方案1】:

同意,整理利用性能计数器的代码可能需要一些时间。但是,上次我这样做时,我将它全部封装在一个很好的可重用类中。它使我在整个代码库中使用性能计数器变得更加简单,并且摩擦最小。

最终结果对我来说非常值得,因为存在于 perf 计数器之上的工具(perfmon 是一大福音)。

【讨论】:

你的可重用课程多少钱?我很懒! j/k ;-)【参考方案2】:

您是否考虑过使用 Enterprise Library 中的 Instrumentation 类?不能说 EntLib 的优缺点,但它似乎越来越受欢迎,而且微软似乎还在继续投资它......

http://msdn.microsoft.com/en-us/library/dd203352.aspx

【讨论】:

以上是关于到 PerformanceCounter 还是编写自定义监控?的主要内容,如果未能解决你的问题,请参考以下文章

PerformanceCounter 报告的 CPU 使用率高于观察到的情况

performanceCounter > Thermal Zone Information 返回的温度是多少?

通过 ASP.NET AJAX 调用使用 PerformanceCounter

PerformanceCounter CPU 和内存,如任务管理器

CPU 使用率与任务管理器、PerformanceCounter 或 ManagementObjectSearcher 不匹配

为啥调用 PerformanceCounter 很慢?