.NET Framework
Prozess- und Thread-Affinitätseinstellung
Suche…
Parameter
Parameter | Einzelheiten |
---|---|
Affinität | Ganzzahl, die die Menge der Prozessoren beschreibt, auf denen der Prozess ausgeführt werden darf. Wenn Sie beispielsweise möchten, dass Ihr Prozess auf einem 8-Prozessor-System nur auf den Prozessoren 3 und 4 ausgeführt wird, wählen Sie die Affinität wie folgt aus: 00001100 = 12 |
Bemerkungen
Die Prozessoraffinität eines Threads ist die Menge von Prozessoren, zu denen er eine Beziehung hat. Mit anderen Worten, die, auf denen es ausgeführt werden kann.
Prozessoraffinität stellt jeden Prozessor als ein Bit dar. Bit 0 steht für Prozessor Eins, Bit 1 für Prozessor Zwei usw.
Holen Sie sich die Prozessaffinitätsmaske
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');
}
}
Verwendungsbeispiel:
private static void Main(string[] args)
{
GetProcessAffinityMask();
Console.ReadKey();
}
// Output:
// Process Test.vshost Affinity Mask is : 11111111
Legen Sie die Prozessaffinitätsmaske fest
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));
}
Verwendungsbeispiel:
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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow