使用工作单元性能计数器
工作单元性能计数器使 Windows 平台能够深入了解应用程序的进程。 工作单元使应用能够描述应用程序的哪些部分在特定进程上运行并声明所有权。 例如,Web 浏览器有自己的任务管理器来管理其所有进程;对于工作单元性能计数器,可以从 Windows 任务管理器获取该级别的详细信息和控制。
例如,考虑在用户设备上运行的 Microsoft Edge 浏览器。 浏览器在特定进程中运行,但创建其他进程以托管选项卡、网络和音频服务、扩展和其他功能。 特定进程可用于运行多个工作单元,不同的应用可以共享它们。 在内部,浏览器知道其依赖项以及如何与必要的进程通信,但 Windows 平台和其他应用程序不知道浏览器是如何构成的。 拥有此类信息有助于提供更精确的资源使用情况信息,并帮助诊断应用问题;任务管理器可以报告进程上运行的工作单元。 这样,调试器可以通过描述进程上运行的工作类型来简化开发人员工作负载。
每个工作单元都具有以下属性。
- AppOwnerProcessId:拥有给定工作单位的进程 ID。
- HostProcessId:运行给定工作单元的进程 ID。
- 类型:接收工作单元的应用程序应如何解释该工作单元。
- 标题:工作单位的标签。
- UniqueId:工作单位的标识符。
数据协定
与 Windows 平台中的工作单位共享的信息可供系统中运行的任何应用查询。 数据使用 性能计数器 API 提供和使用,公开可用并记录。 作为其实现的一部分,性能计数器必须具有唯一标识符字符串,我们使用该字符串来标识工作单元的标签。 性能计数器唯一标识符字符串的预期格式为 。
- 前导“WorkUnit”字符串。
- 基于 1 的 uniqueId。
- 运行工作单元的进程标识符。
- 表示应用程序的main进程的标识符。
- 工作单元的用户友好标题。
注意
例如,如果必须更新工作单位信息 (标题) 更改,则它保留其 uniqueId。 新单位必须使用新的唯一标识符。 必须使用管道字符“|”连接 uniqueId,如以下示例所示。
示例:
"WorkUnit|1|4321|1019|Instance 1 of pid 1111, owned by 1111"
"WorkUnit|1|8765|1019|Instance 1 of pid 5555, owned by 5555"
"WorkUnit|1|9999|1019|Instance 1 of pid 9999, owned by 9999"
"WorkUnit|2|4321|1019|Instance 2 of pid 1234, owned by 4321"
"WorkUnit|2|8765|1019|Instance 2 of pid 5678, owned by 8765"
提供工作单位
可以使用性能计数器 API 创建工作单元性能 计数器集的实例。 遵循上面所述的 数据协定 ,确保其他应用可以成功验证和使用你的数据。
可视化工作单位
如果要从工作单元性能计数器查询数据,可以使用性能计数器 API 或性能监视器应用程序。
- 在 CMD 提示符处键入“perfmon”或“运行”对话框以启动 PerfMon 工具。
- 在“监视工具”下选择“性能监视器”。
- 单击“添加计数器”按钮 (绿色“+”符号) 。
- 选择并展开“工作单元”以查看运行应用程序提供的计数器。
- 选择列出的计数器:“应用所有者进程 ID”和“主机进程 ID”。
- 选择“所有实例”,然后单击“添加”。
- 单击“确定”。
- 从 UI 中选择“工作单位”计数器