我有一个性能指标类别。此类别中的计数器可能会在我的下一个版本中更改,因此当程序启动时,我想检查该类别是否存在且版本是否正确 - 如果不是,请创建新类别。我可以通过在帮助字符串中存储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
}
答案 0 :(得分: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()));
}
答案 1 :(得分:0)
我认为没有更好的方法。恕我直言,我不认为这是一个可怕的解决方案。