Kraft C # .NET-Anwendung einen einzigen Kern in einem PC mit Multi-Core-Prozessor zu verwenden

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

  •  26-09-2019
  •  | 
  •  

Frage

Hallo Leute diese Frage könnten seltsam erscheinen, aber ich bin mit dem Haptek Menschen Putty-Player für meine C # .NET-Anwendung und ich habe Leute in den Foren sagen gesehen, dass es nicht gut mit einem Multi-Core-Prozessor arbeitet. Meine Anwendung läuft gut auf meinem Core 2 Duo Laptop, aber es hinkt viel, wenn ich es auf einem Quad-Core-Desktop versuchen läuft. Ich dachte an diese für mich zu untersuchen und in diesem Fall würde ich meine Anwendung läuft auf einem einzigen Kern zu erzwingen. Ist das möglich in C #? Dank!

War es hilfreich?

Lösung

Wenn ein Process Variable proc den Prozess hält Sie (Process.GetCurrentProcess() für den laufenden Prozess kümmern, es von GetProcesses() oder GetProcessesByName() usw. für einen anderen Prozess zu erhalten dann:.

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

IdealProcessor ist eine Null-basierte Identität eines einzelnen Kerns. ProcessorAffinity ist eine Bitmaske, so erlaubt 1 Kern Null, 2-Kern eine ermöglicht, 3 können Kerne Null und Eins, 4 Kern zwei ermöglicht, und so weiter.

Ich würde dies testen gründlich . Die Chancen sind sehr stark, dass dies Ihre Leistung tatsächlich beschädigen, in die Fähigkeit, die Reduzierung des Einsatzes von verschiedenen Kernen zu machen, die nach dem alles im Allgemeinen ein Vorteil ist.

Andere Tipps

Wenn die Anwendung single-threaded ist, wird es nicht von Vorteil, mehrere Kerne nehmen. Es ist jedoch möglich, dass der Kernel den Faden um zwischen den Kernen stoßen kann. Ich bezweifle, dass dies die Ursache für Ihre Leistungsprobleme ist.

Wenn Sie möchten, den Faden nach unten auf einen einzelnen Kern binden (nicht sicher, ob dies gewährleistet werden kann), könnte man die System.Diagnostics.ProcessThread.ProcessorAffinity Eigenschaft prüfen will, obwohl ich habe es selbst nie benutzt.

  • Nicht wirklich möglich in C #. Nun, keine Möglichkeit, ich weiß aus. Sie müssen Interop, damit es funktioniert.

  • Sind Sie mit mehreren Threads? Wenn nicht - hm - sorry - nicht viel Sie tun können. Standard-UI-Anwendungen sind nicht mit mehreren Kernen sowieso.

Grundsätzlich Anwendungen nicht mit Themen (Arbeitselemente Threads verwenden) sind von Natur aus einadrigen trotzdem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top