PerformanceCounter dla danego procesu

0

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.

0

Nie wiem. Widzę inny problem.

string inst = instance;
                if (inst.Contains('/'))
                    inst = inst.Split('/')[1];

użyj klasy Path.

0

Po co mam używać klasy Path jak ja to po to splituje bo pod Linuxem zwracało mi : 3103/java czyli ProcessID/ProcessName i to nie jest problem bo działa na tym etapie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1