Я хочу, чтобы загрузка процессора (все ядра) каждую 1сек - PullRequest
0 голосов
/ 15 октября 2018

Прежде всего, я начал изучать C # с 8 месяцев назад, и я не очень хорошо разбираюсь в английском.Поэтому извините, если я скажу что-то, что вы не можете понять.

Теперь я занимаюсь разработкой приложения на C #, которое получает процент использования ЦП.Я хочу получить использование процессора, что все ядра каждую секунду.Затем я использовал класс PerformanceCounter и категорию процессора.Это код, который я написал.

    private void GetCpuUsageEvery1sec(object sender, ElapsedEventArgs e)
    {
        int getValue = 0;
        mProcessorCount = Environment.ProcessorCount;

        mPerformanceCounter.CategoryName = "Processor";
        mPerformanceCounter.CounterName = "% Processor Time";
        mPerformanceCounter.InstanceName = "_TOTAL";

        getValue = (int)Math.Truncate(mPerformanceCounter.NextValue());

        mProcessorCpuUsage[mProcessorCount] = getValue;   //I set TOTAL's usage in last of Array

        Console.WriteLine(DateTime.Now.ToString());
        Console.WriteLine("Core:TOTAL {0}%", mProcessorCpuUsage[mProcessorCount]);

        for (int count = 0; count < mProcessorCount; count++)
        {
            mPerformanceCounter.InstanceName = count.ToString();   //this code is case

            getValue = (int)Math.Truncate(mPerformanceCounter.NextValue());
            mProcessorCpuUsage[count] = getValue;
            Console.WriteLine("Core:{0} {1}%", count, mProcessorCpuUsage[count]);
        }

        Console.WriteLine();

    }

Я написал метод с классом таймера, который также запускает метод GetCpuUsageEvery1sec как событие.

Однако в категории «Процессор» (или «Счетчик времени процессора»),этот счетчик выбрасывает 0, если я изменяю InstanceName.Таким образом, я не могу получить только 0, если я выполняю метод с классом таймера.

Я думаю, что если я хочу получить правильное использование процессора, я должен сделать экземпляры одинаковыми для числа Core.(И многие пользователи будут использовать это приложение. Поэтому я не могу заранее указать количество ядер.)

В этой ситуации я не могу найти другое решение?

1 Ответ

0 голосов
/ 15 октября 2018

Я бы посоветовал вам использовать WMI-запрос:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
            var cpuTimes = searcher.Get()
                .Cast<managementobject>()
                .Select(mo => new
                {
                    Name = mo["Name"],
                    Usage = mo["PercentProcessorTime"]
                }
                )
                .ToList();

Подключите его к таймеру, и все будет хорошо, лучше использовать цикл for для каждогоядро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...