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; ... using System.Diagnostics; Process proc = Process.GetCurrentProcess(); long 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 PropertyProcessThread.ProcessorAffinity Property