Как создать версию категории счетчика производительности?


У меня есть категория счетчика производительности. Счетчики в этой категории могут измениться для моего следующего выпуска, поэтому при запуске программы я хочу проверить, существует ли категория, и это правильная версия - если нет, создайте новую категорию. Я могу сделать это, сохранив 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
}
2 2

2 ответа:

В нашей системе каждый раз, когда приложение запускается, мы проверяем существующую категорию. Если он не найден, мы создаем категорию. Если она существует, мы сравниваем существующую категорию с тем, что мы ожидаем, и воссоздаем ее (удаляем, создаем), если отсутствуют значения.

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()));
}

Я не думаю, что есть лучший способ. ИМХО, я не думаю, что это ужасное решение.