Process
and ProcessThread
objects have a ProcessorAffinity
property of IntPtr
type that can be directly manipulated to read/change affinity for up to 64 processors:
using System.Diagnostics;
...
Process Proc = Process.GetCurrentProcess();
long AffinityMask = (long)Proc.ProcessorAffinity;
AffinityMask &= 0x000F; // use only any of the first 4 available processors
Proc.ProcessorAffinity = (IntPtr)AffinityMask;
ProcessThread Thread = Proc.Threads[0];
AffinityMask = 0x0002; // use only the second processor, despite availability
Thread.ProcessorAffinity = (IntPtr)AffinityMask;
...
You can also use the thread's IdealProcessor
property to allow the scheduler to prefer running the thread on a specified processor (without guarantee).
Yes, it's that easy :)
Reference: MSDN ProcessThread.ProcessorAffinity Property
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…