Вот что оказалось проблемой:
Я изначально "вроде" исправил это, перезапустив сервер.Это привело меня к мысли, что вам придется перезапускаться после каждого вызова lodctr, что является ерундой (фу). Иногда это срабатывало из-за порядка, в котором сервисы запускались на сервере, я думаю ...
Оказывается, что на серверах, где он не работал, было несколько процессов с одним и тем же именем исполняемого файла, что означает вызов PerformanceCounter ("Process", "% Processor Time", Process.GetCurrentProcess (). ProcessName ) получает полный мусор.
Допустим, у вас запущены три службы, все с одинаковым именем исполняемого файла "MyWebService.exe", но все они могут находиться в разных местах,использовать разные конфигурации и т. д., затем вам нужно вызвать PerformanceCounter с InstanceName из «MyWebService # 1», «MyWebService # 2» и т. д.
Конечно, это несколько сложнонайти правильный номер для использования после #.И что гораздо хуже: если кто-то убьет MyWebService # 1, PerformanceCounters для MyWebService # 2 начнет отслеживать показатели для того, что раньше было MyWebService # 3.И все, что контролирует MyWebService # 3, получит исключение.
Отличная идея от команды .NET.Вместо того, чтобы использовать Process ID как здравомыслящий человек, почему бы не использовать имена процессов с суффиксом, чтобы идентифицировать процессов вместо o_O
Итак:
- вам нужно регулярно обновлять PerformanceCounter.InstanceName, чтобы убедиться, что вы все еще получили правильный процесс
- вам действительно нужен еще один PerformanceCounter, чтобы получить правильное InstanceName, что оказывается нелепыммедленно.
поискать "PerformanceCounter множественное имя процесса" для более полезных ссылок
Спасибо @PavelAnikhouski за вашу помощь, тем не менее