Похоже, это общая проблема? Я написал службу 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;
}
Я звоню примерно на 30 счетчиков производительности каждые 5 минут. Проблема в том, что, как только я запускаю службу, счетчики портятся, особенно счетчики памяти .Net, и мне приходится их удалять:
unlodctr "C:\Windows\INF\.NETFramework\corperfmonsymbols.ini"
Перестрой их:
lodctr /R
Переустановите их:
lodctr "C:\Windows\INF\.NETFramework\corperfmonsymbols.ini"
Но как только я запускаю службу, они снова портятся. Как мне сохранить их стабильность?