. 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
。
到目前为止,我已经弄清楚,第一部分必须由ProcessName和PID,但我我不知道最后两段("r15"和"ad1")是怎么来的。
有人知道最后两块是什么吗?
一个解决方案是枚举"。. NET CLR Networking 4.0.0.0"类别并搜索ApplicationName.exe_PID*,但更倾向于直接查找正确的名称(如果可能的话)。
查看此链接以获取有关如何构建名称的更多信息。简而言之,"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域的版本适用于测试和应用程序,结果与带有进程名的版本相同。