How can I set processor affinity to a thread or a Task in .NET?

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 = 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: ProcessThread.ProcessorAffinity Property

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)