Process.ProcessorAffinity 属性: public IntPtr ProcessorAffinity { get; set; }
属性值:位掩码,表示关联进程内的线程可以在其上运行的处理器。默认值取决于计算机上的处理器数。默认值为 2 n -1,其中 n 是处理器数。
在 Windows 2000 及更高版本中,进程中的线程可以在处理器间迁移,每次迁移都重新加载处理器缓存。在系统负荷繁重的情况下,指定哪个处理器运行特定的线程可以减少重新加载处理器缓存的次数,从而提高性能。处理器和线程之间的关联称为处理器关系。
每个处理器均表示为一位。位 0 是处理器一,位 1 是处理器二,依次类推。如果将某位设置为值 1,则将选择相应的处理器进行线程分配。
当您将 ProcessorAffinity 值设置为零时,操作系统的调度算法将设置线程的关联。当 ProcessorAffinity
值设置为任何非零值时,该值被解释为指定符合选择条件的处理器的位掩码。
设置CPU关联进程语句示例:
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2;//2表示第2个CPU
程序示例:
using System;
using System.Diagnostics;
using
System.Text;
namespace caAfinity
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("当前CPU亲和力: {0}", Process.GetCurrentProcess().ProcessorAffinity);
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2;
Console.WriteLine("当前CPU亲和力: {0}",
Process.GetCurrentProcess().ProcessorAffinity);
while (true)
{ }
}
}
}
测试双核多线程程序,未配置情况下Process.GetCurrentProcess().ProcessorAffinity=3,即11。
CPU使用情况:
设置Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2; 后CPU使用情况:
多线程经常会占满CPU,通过此方法可在多核系统中限制程序对CPU的占用。
详细测试需要用2U 2路4核服务器测试才能得出。
以下方法可以获取CPU个数,但无法获取核心个数。
using System.Management;
ManagementClass m = new ManagementClass("Win32_Processor");
ManagementObjectCollection mn = m.GetInstances();