Ale*_*ici 12
试试这个:
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)2;
Run Code Online (Sandbox Code Playgroud)
这里有更多关于它的信息.
ProcessorAffinity将每个处理器表示为一个位.位0表示处理器1,位1表示处理器2,依此类推.下表显示了四处理器系统的可能ProcessorAffinity的子集.
Property value (in hexadecimal) Valid processors
0x0001 1
0x0002 2
0x0003 1 or 2
0x0004 3
0x0005 1 or 3
0x0007 1, 2, or 3
0x000F 1, 2, 3, or 4
Run Code Online (Sandbox Code Playgroud)
这是一个小样本程序:
//TODO: manage exceptions
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Total # of processors: {0}", Environment.ProcessorCount);
Console.WriteLine("Current processor affinity: {0}", Process.GetCurrentProcess().ProcessorAffinity);
Console.WriteLine("*********************************");
Console.WriteLine("Insert your selected processors, separated by comma (first CPU index is 1):");
var input = Console.ReadLine();
Console.WriteLine("*********************************");
var usedProcessors = input.Split(',');
//TODO: validate input
int newAffinity = 0;
foreach (var item in usedProcessors)
{
newAffinity = newAffinity | int.Parse(item);
Console.WriteLine("Processor #{0} was selected for affinity.", item);
}
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)newAffinity;
Console.WriteLine("*********************************");
Console.WriteLine("Current processor affinity is {0}", Process.GetCurrentProcess().ProcessorAffinity);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
Alex Filipovivi 提供的示例程序似乎不正确,因为它将处理器编号 OR 到 newAffinity 中,而没有先将它们转换为设置位。因此,如果您向该程序输入 3,4,您将获得 7 的亲和掩码,即核心 1、2 和 3!掩码应设置为 12(十六进制 0xC,二进制 1100,如果第 0 位是最低有效位,则设置第 2 位和第 3 位)。
更换
newAffinity = NewAffinity | int.Parse(item);
Run Code Online (Sandbox Code Playgroud)
和
newAffinity = newAffinity | (1 << int.Parse(item)-1);
Run Code Online (Sandbox Code Playgroud)
是一种合理的方式来做到这一点。
| 归档时间: |
|
| 查看次数: |
5972 次 |
| 最近记录: |