2017-09-12 2 views
-3

J'ai compris comment définir le masque d'affinité de processus à exécuter sur tout seul processeur:Comment définir l'affinité de processus pour "Tous les processeurs" en C#?

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

Mais je ne peux pas comprendre comment il remis à tous les processeurs. Comment je fais ça? Merci.

+0

Vous supposez qu'il était * * mis à tous les processeurs - peut-être qu'il a été lancé différemment. Pourquoi ne pas récupérer la valeur de 'p.ProcessorAffinity' et la restaurer ensuite? –

+5

Avez-vous dérangé [lire la documentation] (https://msdn.microsoft.com/fr-fr/library/system.diagnostics.process.processoraffinity (v = vs.110) .aspx)? – mason

+0

@mason comment ce lien répond-il à cette question? – CodeCaster

Répondre

0

Selon MSDN

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

Un masque de bits représentant les processeurs que les threads du processus associé peut fonctionner sur. La valeur par défaut dépend du nombre de processeurs sur l'ordinateur. La valeur par défaut est 2^n - 1, où n est le nombre de processeurs.

Vous devriez mettre

Process p = ... 

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

afin de lever les restrictions (maintenant p peut être exécuté sur un processeur: nous avons 11...11 bitmask avec N ceux où N est le nombre de processeurs logiques)

0

Il semble que vous souhaitiez rendre l'affinité à la valeur par défaut (gardez à l'esprit que ce n'est pas nécessairement la même chose que tous les processeurs, la valeur par défaut est 2^n -1, où n est le nombre de processeurs, voir the documentation).

Pour revenir à la valeur par défaut, il suffit de stocker la valeur par défaut dans une variable, puis de la réaffecter.

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);  
} 

Résultats sur ma machine:

affinité d'origine: 255

affinité actuelle: 1

affinité final: 255