Jer*_*myK 25 c# performancecounter
我正在跟踪同一个应用程序的多个实例,需要获取两个进程的内存和CPU使用.但是,我似乎无法找到一种方法来使用性能计数器,并知道哪个结果是针对哪个进程的.我已经看到我可以将#1等附加到名称的末尾以获得每个的结果,但这并不能告诉我哪个是哪个进程.
如何确定ProcessId或将进程ID传递给计数器以获得具有相同名称的每个进程的结果?
PerformanceCounterCPU.CategoryName = "Process";
PerformanceCounterCPU.CounterName = "% Processor Time";
PerformanceCounterCPU.InstanceName = proc.ProcessHandle.ProcessName;
PerformanceCounterMemory.CategoryName = "Process";
PerformanceCounterMemory.CounterName = "Working Set - Private";
PerformanceCounterMemory.InstanceName = proc.ProcessHandle.ProcessName;
Run Code Online (Sandbox Code Playgroud)
M.B*_*ock 30
这个答案对一个相关的问题可能的工作:
private static string GetProcessInstanceName(int pid)
{
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
string[] instances = cat.GetInstanceNames();
foreach (string instance in instances)
{
using (PerformanceCounter cnt = new PerformanceCounter("Process",
"ID Process", instance, true))
{
int val = (int) cnt.RawValue;
if (val == pid)
{
return instance;
}
}
}
throw new Exception("Could not find performance counter " +
"instance name for current process. This is truly strange ...");
}
Run Code Online (Sandbox Code Playgroud)
如果您不介意更改计算机范围的注册表,则可以将 Windows 配置为使用 ProcessName_ProcessID 形式作为 Perf Counter 实例名称,而不是附加 #1、#2 等:
创建 DWORDHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance\ProcessNameFormat并将其值设置为 2。
如果您坚持使用 #1、#2 等形式,请注意给定进程的实例名称可能会在进程的生命周期内发生变化!
| 归档时间: |
|
| 查看次数: |
20384 次 |
| 最近记录: |