2011-03-18 3 views
2

J'analyse une application de bureau .net. J'ai trouvé ce code:L'équilibrage de charge étrange sur une machine de processus multicœur

if (System.Environment.ProcessorCount > 1) 
{ 
    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High; 
    Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(2); 
} 
else 
{ 
    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.AboveNormal; 
} 

Process.GetCurrentProcess().PriorityBoostEnabled = true; 

J'ai lancé cette application sur la machine qui a le processeur multi-cœur (4): enter image description here

Comme on peut le voir les charges d'application que le second noyau (voir code), mais en même temps je ne peux rien faire sur mon ordinateur même si 3 cœurs sont en veille.

Qu'est-ce qui se passe? Est-il sensé d'exécuter une application en utilisant le cœur particulier?

AJOUTÉE

Il y a une autre application (2) qui peut contenir le temps processeur de repos. Cela fonctionne avec une haute priorité et je ne peux pas changer son réglage. Donc, cette application devrait être en concurrence avec celle-là.

+2

Je ne connais pas votre problème observé. Mais en général, les threads/programmes intensifs de calcul devraient fonctionner en priorité normale ou inférieure et jamais en priorité plus élevée. La haute priorité est pour les choses qui sont bon marché sur les besoins de fonctionner régulièrement/avec une faible latence. – CodesInChaos

+1

Que fait votre programme? Accéder à n'importe quelle mémoire, disque ou autre E/S? Les processeurs/cœurs ne sont pas les seules ressources partagées. – Justin

+0

Le niveau de priorité «supérieur» n'est jamais recommandé, à moins que cela ne soit absolument nécessaire car d'autres applications sont trop exigeantes. Essayez à nouveau sans la priorité accrue; Votre système devrait être plus réactif alors. Sinon, quelque chose d'autre prend vos ressources. – pyrocumulus

Répondre

0

Votre application dispose-t-elle d'une fenêtre principale? Est-ce au premier plan? Si oui, pas étonnant puisque PriorityBoostEnabled=true rendra la priorité de votre application encore plus élevée alors.

+0

Oui, l'application dispose d'une fenêtre principale. C'est un client UI riche (grilles, tâches multithread ...) – garik

Questions connexes