Монитор производительности .NET CLR Networking 4.0.0.0 Именование экземпляра - PullRequest
5 голосов
/ 28 декабря 2011

Я пытаюсь использовать счетчик производительности, чтобы определить, сколько байтов отправлено или получено моим приложением.Я следовал предложенному решению, найденному здесь: Расчет пропускной способности , но экземпляр моего приложения не отображается в категории «.NET CLR Networking».Сообщение об исключении:

"Экземпляр 'ApplicationName [8824]' не существует в указанной категории"

(я добавил <performanceCounters enabled="true"/> в мой файл App.config иего все равно невозможно найти после некоторых сетевых операций)

Итак, я запустил Performance Monitor, чтобы увидеть ошибку своими глазами.Как и ожидалось, мое приложение не отображается в категории .NET CLR Networking , но, к счастью, его можно найти в категории .NET CLR Networking 4.0.0.0 .

Однако моя проблема в том, что я не могу понять, как генерируется имя экземпляра.Вот имя экземпляра, который я вижу в системном мониторе: ApplicationName.exe_p4952_r15_ad1.

До сих пор я выяснил, что первые части должны быть сделаны из ProcessName и PID, но я понятия не имею, откуда взялись последние два ( "r15" и "ad1" ).

Кто-нибудь знает, чтопоследние две части могут быть?

Одним из решений было бы перечислить все экземпляры, найденные в категории «.NET CLR Networking 4.0.0.0», и выполнить поиск ApplicationName.exe_PID *, но предпочел бы искатьисправить имя напрямую (если возможно).

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Проверьте эту ссылку для получения дополнительной информации о том, как строится имя.Короче говоря, «rXX» - это идентификатор времени выполнения общеязыковой среды выполнения (экземпляра), которая выполняет ваш код.

Это новое соглашение об именах было установлено, чтобы в параллельных сценариях (где у вас большеодин экземпляр CLR в процессе; это новая функция, начиная с .NET 4.0), на самом деле вы можете различать счетчики производительности.

«adXX» не описан на странице выше, но из аббревиатуры I 'Я полагаю, это означает домен приложения.Номер может быть AppDomain.Id домена приложения.

0 голосов
/ 03 августа 2018

См. этот ответ о том, как получить правильное имя. Короче говоря, используйте

var processFileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
var instanceName = VersioningHelper.MakeVersionSafeName(processFileName, ResourceScope.Machine, ResourceScope.AppDomain);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...