Witam.
Mam programik w którym statuje 2 procesy Javy, chciałbym, aby mój PerformanceCounter pobierał użycie procesora i ramu dla każdego procesu z osobna.
Znalazłem pewne rozwiązanie, ale nie działa ono pod Linuxem (mono), ponieważ PerformanceCounter pod linuxem nie wspiera (Process)(ID Process).
public class ProcessCpuCounter
{
public static PerformanceCounter GetPerfCounterForProcessId(int processId, string processCounterName = "% Processor Time")
{
string instance = GetInstanceNameForProcessId(processId);
if (string.IsNullOrEmpty(instance))
return null;
return new PerformanceCounter("Process", processCounterName, instance);
}
public static string GetInstanceNameForProcessId(int processId)
{
var process = Process.GetProcessById(processId);
string processName = Path.GetFileNameWithoutExtension(process.ProcessName);
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
string[] instances = cat.GetInstanceNames()
.Where(inst => inst.Contains(processName))
.ToArray();
foreach (string instance in instances)
{
string inst = instance;
if (inst.Contains('/'))
inst = inst.Split('/')[1];
using (PerformanceCounter cnt = new PerformanceCounter("Process", "ID Process", inst, true))
using (Process p = Process.GetProcessesByName(inst)[0])
{
int val = (int)cnt.RawValue;
int val = p.Id;
if (val == processId)
{
return inst;
}
}
}
return null;
}
}
Czy jest jakiś inny sposób (lub jak ten przerobić) na pobranie takich danych ?
Dziękuję za pomoc.