Windows: 进程变更到最大优先级
Linux: 进程变换为:
PR rt(实时模式-进程)
NI -20(最高优先级)
使用方法:
Priority.AdjustToHighestPriority();
源码实现:
namespace MyServer.Utilits
{
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
public static unsafe class Priority
{
[Dllimport("libc", EntryPoint = "getpid", CallingConvention = CallingConvention.Cdecl)]
private static extern int getpid();
[Dllimport("libc", EntryPoint = "setpriority", CallingConvention = CallingConvention.Cdecl)]
private static extern int setpriority(int which, int who, int prio);
[Dllimport("libc", EntryPoint = "sched_get_priority_max", CallingConvention = CallingConvention.Cdecl)]
private static extern int sched_get_priority_max(int policy);
[Dllimport("libc", EntryPoint = "sched_setscheduler", CallingConvention = CallingConvention.Cdecl)]
private static extern int sched_setscheduler(int __pid, int __policy, sched_param* __param);
[Dllimport("kernel32", EntryPoint = "SetPriorityClass", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetPriorityClass(IntPtr hProcess, uint dwPriorityClass);
private const uint HIGH_PRIORITY_CLASS = 128;
private const int PRIO_PROCESS = 0;
private const int SCHED_FIFO = 1;
private const int SCHED_RR = 2;
[StructLayout(LayoutKind.Sequential)]
private struct sched_param
{
public int sched_priority;
};
[SecurityCritical]
[SecuritySafeCritical]
public static void AdjustToHighestPriority()
{
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
IntPtr hProcess = Process.GetCurrentProcess().Handle;
SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
}
else
{
setpriority(PRIO_PROCESS, 0, -20);
sched_param param_;
param_.sched_priority = sched_get_priority_max(SCHED_FIFO); // SCHED_RR
sched_setscheduler(getpid(), SCHED_RR, ¶m_);
}
}
}
}



