.NET Framework
Réglage d'affinité des processus et des threads
Recherche…
Paramètres
Paramètre | Détails |
---|---|
affinité | entier décrivant l'ensemble des processeurs sur lesquels le processus est autorisé à s'exécuter. Par exemple, sur un système à 8 processeurs, si vous souhaitez que votre processus ne soit exécuté que sur les processeurs 3 et 4, choisissez l’affinité suivante: 00001100 qui équivaut à 12 |
Remarques
L'affinité du processeur d'un thread est l'ensemble des processeurs avec lesquels il a une relation. En d'autres termes, ceux sur lesquels il peut être programmé de s'exécuter.
L'affinité du processeur représente chaque processeur en tant que bit. Le bit 0 représente le processeur un, le bit 1 représente le processeur deux, etc.
Obtenir un masque d'affinité de processus
public static int GetProcessAffinityMask(string processName = null)
{
Process myProcess = GetProcessByName(ref processName);
int processorAffinity = (int)myProcess.ProcessorAffinity;
Console.WriteLine("Process {0} Affinity Mask is : {1}", processName, FormatAffinity(processorAffinity));
return processorAffinity;
}
public static Process GetProcessByName(ref string processName)
{
Process myProcess;
if (string.IsNullOrEmpty(processName))
{
myProcess = Process.GetCurrentProcess();
processName = myProcess.ProcessName;
}
else
{
Process[] processList = Process.GetProcessesByName(processName);
myProcess = processList[0];
}
return myProcess;
}
private static string FormatAffinity(int affinity)
{
return Convert.ToString(affinity, 2).PadLeft(Environment.ProcessorCount, '0');
}
}
Exemple d'utilisation:
private static void Main(string[] args)
{
GetProcessAffinityMask();
Console.ReadKey();
}
// Output:
// Process Test.vshost Affinity Mask is : 11111111
Définir le masque d'affinité du processus
public static void SetProcessAffinityMask(int affinity, string processName = null)
{
Process myProcess = GetProcessByName(ref processName);
Console.WriteLine("Process {0} Old Affinity Mask is : {1}", processName, FormatAffinity((int)myProcess.ProcessorAffinity));
myProcess.ProcessorAffinity = new IntPtr(affinity);
Console.WriteLine("Process {0} New Affinity Mask is : {1}", processName, FormatAffinity((int)myProcess.ProcessorAffinity));
}
Exemple d'utilisation:
private static void Main(string[] args)
{
int newAffinity = Convert.ToInt32("10101010", 2);
SetProcessAffinityMask(newAffinity);
Console.ReadKey();
}
// Output :
// Process Test.vshost Old Affinity Mask is : 11111111
// Process Test.vshost New Affinity Mask is : 10101010
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow