如何对性能计数器类别进行版本控制?
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 性能计数器即使在删除性能类别后仍保持其状态