. net CLR网络4.0.0.0实例命名

本文关键字:实例 CLR 网络 net | 更新日期: 2023-09-27 18:18:51

我试图使用性能计数器来确定我的应用程序发送或接收了多少字节。我遵循这里找到的建议解决方案:计算带宽,但我的应用程序的实例没有显示在"。NET CLR Networking"类别。异常消息:

"实例'ApplicationName[8824]'不存在类别"

(我已经在我的App.config中添加了<performanceCounters enabled="true"/>,并且在一些网络活动后仍然无法找到)

所以我启动了性能监视器,用我自己的眼睛看到错误。正如预期的那样,我的应用程序没有显示在中。. NET CLR Networking类别,但幸运的是,它可以在中找到。. NET CLR Networking 4.0.0.0 category.

然而,我的问题是我不能弄清楚实例名是如何生成的。下面是我在性能监视器中看到的实例的名称:ApplicationName.exe_p4952_r15_ad1

到目前为止,我已经弄清楚,第一部分必须由ProcessNamePID,但我我不知道最后两段("r15""ad1")是怎么来的。

有人知道最后两块是什么吗?

一个解决方案是枚举"。. NET CLR Networking 4.0.0.0"类别并搜索ApplicationName.exe_PID*,但更倾向于直接查找正确的名称(如果可能的话)。

. net CLR网络4.0.0.0实例命名

查看此链接以获取有关如何构建名称的更多信息。简而言之,"rXX"是执行代码的公共语言运行时(实例)的运行时ID。

这个新的命名约定的建立是为了在并行的情况下(在一个进程中有多个CLR实例;这是一个从。net 4.0开始的新特性),你实际上可以区分性能计数器。

"adXX"没有在上面的页面中描述,但是我认为它是Application Domain的缩写。这个号码可能是AppDomain。应用域Id。

查看如何获得正确名称的答案。总之,使用

var processFileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
var instanceName = VersioningHelper.MakeVersionSafeName(processFileName, ResourceScope.Machine, ResourceScope.AppDomain);

应该是:

string appDomain = AppDomain.CurrentDomain.FriendlyName.ToLower();
string a = VersioningHelper.MakeVersionSafeName(appDomain, ResourceScope.Machine, ResourceScope.AppDomain);

我在编写单元测试时遇到了带有进程名的版本问题。带有app域的版本适用于测试和应用程序,结果与带有进程名的版本相同。