Счетчики производительности .Net портятся, когда я их вызываю - PullRequest
0 голосов
/ 26 июня 2018

Похоже, это общая проблема? Я написал службу 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"

Но как только я запускаю службу, они снова портятся. Как мне сохранить их стабильность?

1 Ответ

0 голосов
/ 28 июня 2018

Похоже, это было связано с 32 против 64 бит. Я попытался настроить приложение как 64-битное приложение, и, видимо, у меня не было правильно настроено. Как только я переключился обратно на 32 бит, он работал отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...