.NET Framework
Process och trådaffinitetsinställning
Sök…
parametrar
Parameter | detaljer |
---|---|
affinitet | heltal som beskriver uppsättningen processorer som processen får köras på. Till exempel på ett 8-processorsystem om du vill att din process endast ska köras på processorerna 3 och 4 än du väljer affinitet så här: 00001100 vilket motsvarar 12 |
Anmärkningar
Processorns affinitet för en tråd är den uppsättning processorer som den har en relation till. Med andra ord, de som det kan schemaläggas för att köras på.
Processoraffinitet representerar varje processor som en bit. Bit 0 representerar processor en, bit 1 representerar processor två, och så vidare.
Skaffa processaffinitetsmask
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');
}
}
Exempel på användning:
private static void Main(string[] args)
{
GetProcessAffinityMask();
Console.ReadKey();
}
// Output:
// Process Test.vshost Affinity Mask is : 11111111
Ställ in processaffinitetsmasken
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));
}
Exempel på användning:
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow