处理重复的实例名称
尽管强烈建议提供程序使用唯一实例名称,但并非所有提供程序都适合。 显示重复实例名称的约定是向实例名称附加 #
字符和序列号,但名称第一次出现时除外。 例如,如果示例中出现三次实例 svchost
,则三个名称分别显示为 svchost
、svchost#1
和 svchost#2
。
遗憾的是,此约定无法完全解决问题。 序列号是根据特定实例名称出现在示例中的顺序分配的,此顺序在示例之间可能不一致。 例如,示例 A 可能会看到 svchost
(PID 100)、svchost#1
(PID 200) 和 svchost#2
(PID 300)。 然后,如果使用 PID 100 的 svchost 关闭,下一个示例将看到 svchost
(PID 200) 和 svchost#1
(PID 300)。 基本匹配逻辑将尝试将示例 A 的 svchost#1
统计信息(来自 PID 200)与示例 B 的 svchost#1
统计信息(来自 PID 300)匹配,从而导致示例 B 的结果无效。当示例中显示的新的非唯一实例或者非唯一实例在示例中停止显示时(除非添加/删除的实例是最后一个实例),则会发生错误。
进程计数器集
此问题对于 Process
计数器集尤其成问题,因为它仅使用进程的 EXE 名称作为实例名称,即使 EXE 名称不唯一也如此。 由于兼容性问题,无法在 Windows 上更改 Process
计数器集的默认行为。
提示
Windows 11 及更高版本包括新的 Process V2
计数器集。 Process V2
计数器集包括实例名称中的进程 ID (PID),以避免 Process
计数器集的名称重复问题。
可以通过在 HKLM\System\CurrentControlSet\Services\Perfproc\Performance
注册表项下设置 ProcessNameFormat
或 ThreadNameFormat
注册表值来更改 Process
和 Thread
计数器集的行为,以使用唯一实例名称。
注意
为 Process
计数器集启用唯一实例名称可能会导致某些程序的行为不正确,因为许多程序预期非唯一命名模式。 例如,查找具有特定已知 EXE 名称的实例的程序在启用唯一实例名称后将无法再找到该实例。
这些值的注册表类型为 REG_DWORD
。 将值设置为 2
会向进程实例名称附加进程标识符 (PID),并向线程实例名称附加线程标识符 (TID)。 若要禁用此功能,请将该值设置为 1 或删除该值。