2017-09-12 4 views
-3

Ich habe, wie Prozessaffinität heraus Maske setzen Prozess auf nur einzelnen Prozessor ausgeführt wird:Wie wird die Prozessaffinität für "Alle Prozessoren" in C# festgelegt?

Process p = ... //getting required process 
p.ProcessorAffinity = (IntPtr)0x0001; 

Aber ich kann nicht herausfinden, wie es zu allen Prozessoren zurück zu setzen. Wie mache ich das? Vielen Dank.

+0

Sie es unter der Annahme, * war * auf alle Prozessoren gesetzt - vielleicht wurde es anders gestartet. Warum nicht zuerst den Wert von "p.ProcessorAffinity" holen und danach wiederherstellen? –

+5

Haben Sie [die Dokumentation lesen] (https://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity (v = vs.110) .aspx)? – mason

+0

@mason Wie beantwortet dieser Link diese Frage? – CodeCaster

Antwort

0

MSDN Nach

https://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity(v=vs.110).aspx

eine Bitmaske, die Prozessoren darstellt, dass die Fäden in der zugehörigen Prozess auf ausgeführt werden können. Der Standardwert hängt von der Anzahl der Prozessoren auf dem Computer ab. Der Standardwert ist 2^n - 1, wobei n die Anzahl der Prozessoren ist.

So sollten Sie

Process p = ... 

p.ProcessorAffinity = (IntPtr)((1 << Environment.ProcessorCount) - 1); 

in Ordnung bringen, die Beschränkungen aufzuheben (jetzt p kann auf jedem Prozessor ausgeführt werden: wir 11...11 bitmask mit N diejenigen haben, wo N die Anzahl der logischen Prozessoren ist)

0

Es klingt, als ob Sie die Affinität auf den Standardwert zurücksetzen möchten (beachten Sie, dass dies nicht unbedingt derselbe ist wie bei allen Prozessoren, der Standardwert ist 2^n -1, wobei n die Anzahl der Prozessoren ist, siehe the documentation).

Um zum Standard zurückzukehren, speichern Sie den Standard einfach in einer Variablen und weisen Sie ihn dann neu zu.

void Main() 
{ 
    Process p = Process.GetProcessById(12008); 
    var originalAffinity = p.ProcessorAffinity; 
    Console.WriteLine("Original affinity: " + originalAffinity); 
    p.ProcessorAffinity = (IntPtr)0x0001; 
    Console.WriteLine("Current affinity: " + p.ProcessorAffinity); 
    p.ProcessorAffinity = originalAffinity; 
    Console.WriteLine("Final affinity: " + p.ProcessorAffinity);  
} 

Ergebnisse auf meiner Maschine:

Original-Affinität: 255

Aktuelle Affinität: 1

Schluss Affinität: 255

Verwandte Themen