如何使用C#限制Windows进程的CPU使用率

时间:2014-08-18 14:27:07

标签: c# cpu-usage thread-priority cpu-time

我需要编写一个附加到某些Windows进程的类,监视并限制它们的cpu使用情况。 流程优先级的改变对我没有帮助,所以我真的需要编写一个与BES或ThreadMaster基本类似的程序。 所以我需要创建一个类似这样的类(伪代码):

public void cpuLimiter(pid)
{
    ProcessHandle handle = attachToProcess(pid);
    while (cpuLimiting)
    {
        if (handle.cpuUsage > 30%)
        {
            handle.sleep(100miliseconds);
        }
        sleep(10miliseconds);
    }
    closeHandle(pid);
}

我希望我说清楚我想要完成什么,只是我不知道如何。 感谢每一位帮助。

1 个答案:

答案 0 :(得分:7)

  • 您创建一个JOB对象
  • 限制JOB的CPU
  • 您将目标流程附加到JOB

请参阅Job ObjectsCreateJobObjectSetInformationJobObjectJOBOBJECT_CPU_RATE_CONTROL_INFORMATIONAssignProcessToJobObject。不要试图手工制作自己的内部流程限制,让专门为此任务设计的组件(即工作)处理任务。

有关NT作业本机API的托管用法,请参阅Working example of CreateJobObject/SetInformationJobObject pinvoke in .net?