在 .NET 中,所有线程和子进程的处理器关联和优先级类都可以使用Process.ProcessorAffinity
和Process.PriorityClass
属性进行设置。使用作业对象似乎可以使用JOB_OBJECT_LIMIT_AFFINITY
和JOB_OBJECT_LIMIT_PRIORITY_CLASS
标志设置相同的对象。
那么,在作业对象和流程上设置上述某些限制有什么区别?
编辑:一旦我将作业对象的限制设置为较低的值,低权限进程仍然可以覆盖它们。这是否意味着工作对象限制没有得到加强?如何限制低权限帐户/进程覆盖它们?
设置什么:
JOBOBJECT_BASIC_LIMIT_INFORMATION jobBasicInfo = {0};
jobBasicInfo.LimitFlags = JOB_OBJECT_LIMIT_AFFINITY;
jobBasicInfo.Affinity = (ULONG_PTR) (1); // affinitize to processor 1
jobBasicInfo.LimitFlags = JOB_OBJECT_LIMIT_SCHEDULING_CLASS;
jobBasicInfo.SchedulingClass = 4; // below normal priority class
SetInformationJobObject( hJob,
JobObjectBasicLimitInformation,
&jobBasicInfo,
sizeof(jobBasicInfo));
低权限进程如何覆盖它:
Process process = Process.GetCurrentProcess();
process.PriorityClass = ProcessPriorityClass.High;
// all processors mask
process.ProcessorAffinity = new IntPtr((int)Math.Pow(2, Environment.ProcessorCount) - 1);