如何对性能计数器类别进行版本控制?

Posted

技术标签:

【中文标题】如何对性能计数器类别进行版本控制?【英文标题】:How to version a performance counter category? 【发布时间】:2009-10-15 18:53:52 【问题描述】:

我有一个性能计数器类别。此类别中的计数器可能会在我的下一个版本中更改,因此当程序启动时,我想检查该类别是否存在并且它是正确的版本 - 如果不存在,则创建新类别。我可以通过在帮助字符串中存储一个 GUID 来做到这一点,但这显然很臭。使用 .NET API 是否可以更简洁地做到这一点?

现有的臭味版本...

if (PerformanceCounterCategory.Exists(CATEGORY_NAME))

    PerformanceCounterCategory c = new PerformanceCounterCategory(CATEGORY_NAME);
    if (c.CategoryHelp != CATEGORY_VERSION)
    
        PerformanceCounterCategory.Delete(CATEGORY_NAME);
    


if (!PerformanceCounterCategory.Exists(CATEGORY_NAME))

      // Create category

【问题讨论】:

【参考方案1】:

在我们的系统中,每次应用程序启动时,我们都会检查现有类别。如果没有找到,我们创建类别。如果存在,我们将现有类别与我们期望的进行比较,如果有缺失值则重新创建(删除、创建)。

var missing = counters
.Where(counter => !PerformanceCounterCategory.CounterExists(counter.Name, CategoryName))
.Count();

if (missing > 0)

    PerformanceCounterCategory.Delete(CategoryName);

    PerformanceCounterCategory.Create(
        CategoryName,
        CategoryHelp,
        PerformanceCounterCategoryType.MultiInstance,
        new CounterCreationDataCollection(counters.Select(x => (CounterCreationData)x).ToArray()));

【讨论】:

【参考方案2】:

我认为没有更好的方法。恕我直言,我认为这不是一个糟糕的解决方案。

【讨论】:

以上是关于如何对性能计数器类别进行版本控制?的主要内容,如果未能解决你的问题,请参考以下文章

性能计数器:如何在给定类别中拥有超过 1 个 AverageBase?

RawFraction 性能计数器即使在删除性能类别后仍保持其状态

在服务中删除和创建性能计数器时,它可能会挂起该服务

创建性能计数器 PowerShell:指定类别的计数器布局无效

无法使用 c# 获取特定于 SSAS 的性能计数器类别

类别不存在。在为 Ram 使用创建性能计数器时