3 Stimmen

Verwendung von Process.ProcessorAffinity auf einem System mit 32+ logischen Kernen

Ich versuche, die Prozessor-Affinität für einen Prozess auf einer Maschine mit insgesamt 16 physischen Prozessorkernen, 32 logischen, festzulegen. Früher haben wir ein int verwendet, aber das wird überlaufen, wenn Sie 32 logische Kerne haben.

Wird es funktionieren, die Prozessor-Affinität weiterhin mit einem long anstelle eines int festzulegen?

Sehen Sie sich den folgenden Code an.

 try
 {
    string pathToExe = GetPathToExe( jobType );

    long processorAffinity = DetermineProcessorAffinity();

    Process jobProcess = Process.Start( pathToExe, jobId.ToString() );
    if ( jobProcess != null )
    {
       jobProcess.ProcessorAffinity = new IntPtr( processorAffinity );
    }

 }

4voto

JaredPar Punkte 699699

Unter der Haube wird die ProcessorAffinity-Eigenschaft letztendlich die Win32-Methode SetProcessAffinityMask aufrufen.

Dieser Ansatz ist dafür gedacht, mit mehr als 32 Prozessoren zu arbeiten und sollte funktionieren.

Aber beachten Sie, dass dieser Ansatz in einem 32-Bit-Prozess nicht funktioniert. In einem 32-Bit-Prozess wird der zugrunde liegende Wert eines IntPtr immer noch 32 Bit betragen. Der Konstruktor von IntPtr wird den long-Wert stillschweigend in einen int-Wert kürzen und Sie werden nie die Affinität für mehr als die zusätzlichen Prozessoren festlegen können.

2voto

larsmoa Punkte 12018

Von IntPtr-Dokumentation:

Der IntPtr-Typ ist so konzipiert, dass er eine ganze Zahl ist, deren Größe plattformspezifisch ist. Das heißt, eine Instanz dieses Typs soll auf 32-Bit-Hardware und Betriebssystemen 32 Bit und auf 64-Bit-Hardware und Betriebssystemen 64 Bit betragen.

Andere Worte: Es sollte auf 64-Bit-Systemen funktionieren, aber nicht auf 32-Bit-Systemen. Ich denke, das ist in Ihrem Fall kein Problem.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X