Прочитать на английском

Поделиться через


Process.PriorityClass Свойство

Определение

Возвращает или задает общую категорию приоритета для процесса.

public System.Diagnostics.ProcessPriorityClass PriorityClass { get; set; }

Значение свойства

Категория приоритета для связанного процесса, из которой вычисляется свойство BasePriority.

Исключения

Не удается задать или получить сведения о приоритете процесса от связанного ресурса процесса.

-или-

Идентификатор процесса или дескриптор процесса равен нулю. (Процесс не был запущен.)

Вы пытаетесь получить доступ к свойству PriorityClass процесса, выполняющегося на удаленном компьютере. Это свойство доступно только для процессов, запущенных на локальном компьютере.

Процесс Id недоступен.

Невозможно задать класс приоритета, поскольку он не использует допустимое значение, как определено в перечислении ProcessPriorityClass.

Примеры

В следующем примере запускается экземпляр Блокнота. Затем в примере извлекаются и отображаются различные свойства связанного процесса. В примере определяется, когда процесс завершается, и отображается код завершения процесса.

using System;
using System.Diagnostics;

namespace ProcessSample
{
    class ProcessMonitorSample
    {
        public static void Main()
        {
            // Define variables to track the peak
            // memory usage of the process.
            long peakPagedMem   = 0,
                 peakWorkingSet = 0,
                 peakVirtualMem = 0;

            // Start the process.
            using (Process myProcess = Process.Start("NotePad.exe"))
            {
                // Display the process statistics until
                // the user closes the program.
                do
                {
                    if (!myProcess.HasExited)
                    {
                        // Refresh the current process property values.
                        myProcess.Refresh();

                        Console.WriteLine();

                        // Display current process statistics.

                        Console.WriteLine($"{myProcess} -");
                        Console.WriteLine("-------------------------------------");

                        Console.WriteLine($"  Physical memory usage     : {myProcess.WorkingSet64}");
                        Console.WriteLine($"  Base priority             : {myProcess.BasePriority}");
                        Console.WriteLine($"  Priority class            : {myProcess.PriorityClass}");
                        Console.WriteLine($"  User processor time       : {myProcess.UserProcessorTime}");
                        Console.WriteLine($"  Privileged processor time : {myProcess.PrivilegedProcessorTime}");
                        Console.WriteLine($"  Total processor time      : {myProcess.TotalProcessorTime}");
                        Console.WriteLine($"  Paged system memory size  : {myProcess.PagedSystemMemorySize64}");
                        Console.WriteLine($"  Paged memory size         : {myProcess.PagedMemorySize64}");

                        // Update the values for the overall peak memory statistics.
                        peakPagedMem   = myProcess.PeakPagedMemorySize64;
                        peakVirtualMem = myProcess.PeakVirtualMemorySize64;
                        peakWorkingSet = myProcess.PeakWorkingSet64;

                        if (myProcess.Responding)
                        {
                            Console.WriteLine("Status = Running");
                        }
                        else
                        {
                            Console.WriteLine("Status = Not Responding");
                        }
                    }
                }
                while (!myProcess.WaitForExit(1000));

                Console.WriteLine();
                Console.WriteLine($"  Process exit code          : {myProcess.ExitCode}");

                // Display peak memory statistics for the process.
                Console.WriteLine($"  Peak physical memory usage : {peakWorkingSet}");
                Console.WriteLine($"  Peak paged memory usage    : {peakPagedMem}");
                Console.WriteLine($"  Peak virtual memory usage  : {peakVirtualMem}");
            }
        }
    }
}

Комментарии

Значение, возвращаемое этим свойством, представляет последний обновленный приоритет процесса. Чтобы получить наиболее актуальный приоритет, сначала необходимо вызвать Refresh() метод .

Класс приоритета процесса охватывает диапазон уровней приоритета потока. Потоки с разными приоритетами, выполняемыми в процессе, выполняются относительно класса приоритета процесса. Win32 использует четыре класса приоритета с семью базовыми уровнями приоритета для каждого класса. Эти классы приоритета процесса записываются в ProcessPriorityClass перечислении , что позволяет задать приоритет Idleпроцесса равным , Normal, High, AboveNormal, BelowNormalили RealTime. В зависимости от времени, прошедшего или других повышений, базовый уровень приоритета может быть изменен операционной системой, когда процесс должен быть выше других для доступа к процессору. Кроме того, можно задать PriorityBoostEnabled для временного повышения уровня приоритета потоков, которые были выведены из состояния ожидания. Приоритет сбрасывается, когда процесс возвращается в состояние ожидания.

Свойство BasePriority позволяет просматривать начальный приоритет, назначенный процессу. Однако, так как оно доступно только для чтения, нельзя использовать BasePriority свойство для задания приоритета процесса. Чтобы изменить приоритет, используйте PriorityClass свойство , которое получает или задает категорию общего приоритета для процесса.

Класс приоритета нельзя просмотреть с помощью системного монитора. В следующей таблице показана связь между значениями BasePriority и PriorityClass .

BasePriority PriorityClass
4 Idle
8 Normal
13 High
24 RealTime

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел