这似乎是一个常见问题?我编写了Windows服务,该服务获取了许多性能计数器,并读取了它们并报告了它们。我像这样抓住它们:
public override IEnumerable<IMetric> GetMetrics()
{
var metrics = new List<IMetric>();
try
{
using (var performanceCounter = new PerformanceCounter(PerformanceCounterCategoryName,
PerformanceCounterName, InstanceName))
{
performanceCounter.NextValue();
Thread.Sleep(SampleInterval);
var nextValue = performanceCounter.NextValue();
metrics.Add(new Metric(HostId, $"{PerformanceCounterCategoryName}:{PerformanceCounterName}",
nextValue, MetricType.Gauge));
}
Logger.Debug($"{PerformanceCounterName} metric retrieved.");
}
catch (InvalidOperationException e)
{
Logger.Error(e,$"Monitor {nameof(GetType)} failed. Performance counter {PerformanceCounterCategoryName}:{PerformanceCounterName} does not exist.");
}
catch (Exception e)
{
Logger.Error(e, e.Message);
}
return metrics;
}
我每5分钟调用30个性能计数器。问题是,一旦启动服务,计数器就会损坏,尤其是.Net Memory计数器,我必须删除它们:
unlodctr "C:\Windows\INF\.NETFramework\corperfmonsymbols.ini"
重建它们:
lodctr /R
重新安装它们:
lodctr "C:\Windows\INF\.NETFramework\corperfmonsymbols.ini"
但是,一旦我启动服务,它们就会再次损坏。如何保持它们稳定?
答案 0 :(得分:0)
似乎这与32 vs 64位有关。我试图将应用程序设置为64位应用程序,显然我没有正确配置它。我一改回32位,就可以正常工作。