Force de l'application C # pour utiliser un seul noyau dans un PC équipé d'un processeur multi-cœurs

StackOverflow https://stackoverflow.com/questions/3429999

  •  26-09-2019
  •  | 
  •  

Question

Salut les gars cette question peut sembler bizarre, mais j'utilise le lecteur Haptek Les gens Putty pour mon application C # et j'ai vu des gens disent dans les forums que cela ne fonctionne pas avec un processeur multi-cœurs. Mon application fonctionne bien sur mon ordinateur portable Core 2 Duo, mais il accuse un retard beaucoup lorsque je tente de l'exécuter sur un ordinateur de bureau Quad Core. Je pensais à enquêter pour moi-même et dans ce cas, je dois forcer mon application à exécuter sur un seul noyau. Est-ce possible en C #? Merci!

Était-ce utile?

La solution

Lorsqu'un Process variable de proc tient le processus que vous aimez (Process.GetCurrentProcess() pour le processus en cours d'exécution, l'obtenir à partir GetProcesses() ou GetProcessesByName() etc. pour un autre procédé ensuite:.

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor est une identité de base zéro d'un seul noyau. ProcessorAffinity est un masque de bits, de sorte que 1 permet zéro noyau, un noyau 2 permet, trois noyaux permet zéro et un, deux 4 permet noyau, et ainsi de suite.

Je le tester bien . Les chances sont très forts que cela fait nuire à votre performance, à réduire la capacité d'utiliser différents noyaux, ce qui est après tout un avantage général.

Autres conseils

Si l'application est mono-thread, il ne sera pas tirer profit de plusieurs noyaux. Cependant, il est possible que le noyau peut percuter le fil autour entre noyaux. Je doute que ce soit la cause de vos problèmes de performance.

Si vous souhaitez attacher le fil vers le bas à un seul noyau (pas sûr si cela peut être garantie), vous voudrez peut-être vérifier la propriété System.Diagnostics.ProcessThread.ProcessorAffinity, bien que je l'ai jamais utilisé moi-même.

  • Pas vraiment possible en C #. Eh bien, pas moyen que je connaisse au large. Vous avez besoin Interop, avec que cela fonctionne.

  • Vous utilisez plusieurs threads? Dans le cas contraire - hm - désolé - pas beaucoup que vous pouvez faire. applications interface utilisateur standard ne sont pas en utilisant de multiples cœurs de toute façon.

Fondamentalement, les applications utilisant des fils non (éléments de travail utilisent threads) sont par nature unique noyau de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top