2

我有一个性能计数器类别。此类别中的计数器可能会在我的下一个版本中更改,因此当程序启动时,我想检查该类别是否存在并且它是正确的版本 - 如果不存在,则创建新类别。我可以通过在帮助字符串中存储一个 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
}
4

2 回答 2

3

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

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()));
}
于 2009-10-19T02:58:05.357 回答
0

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

于 2009-10-16T19:08:35.753 回答