Wie kann ich die Affinität eines Prozesses dauerhaft einstellen?

17721
yuritsuki

Ich habe ein Spiel, das Probleme mit der CPU-Auslastung hat. Eine der Korrekturen besteht darin, einen Kern aus einer Quad-Core-CPU zu deaktivieren. Seit ich das Spiel starte, muss ich manuell in den Task-Manager gehen und die Affinität manuell eingeben. Dies ist ärgerlich, da das Spiel neu veröffentlicht wird und dennoch zu häufigen Abstürzen neigt.

Gibt es eine NON SOFTWARE-Lösung?

Ich habe einige Lösungen online nachgesehen und scheint nur auf Windows 7 ausgerichtet zu sein. Gibt es eine Lösung für Windows 8.1-Benutzer wie mich?

16
Erklären Sie bitte, was Sie unter "manuelle Eingabe der Affinität" verstehen. Pacerier vor 8 Jahren 0
@ Pacerier Ich muss die Affinität manuell ändern, da standardmäßig alle CPUs ausgewählt werden. yuritsuki vor 8 Jahren 0
Sie könnten versuchen, den "Kompatibilitätsmodus" auf eine ausreichend alte Version von Windows zu setzen, wodurch die Affinität auf einen einzelnen Kern festgelegt wird. Ich habe jedoch kein win8 zur Hand, um zu überprüfen, ob dies noch funktioniert. CodesInChaos vor 8 Jahren 0
@cyberwebpoweruser, Hat die Antwort unten für Sie funktioniert? Pacerier vor 8 Jahren 0

3 Antworten auf die Frage

21
The_aLiEn

Sie können eine Verknüpfung erstellen, um die Affinität zuzuweisen.

X:\Windows\System32\cmd.exe /C start /affinity Y game.exe 

Y ist hexadezimal und ist eine kleine Maske:

0x1 - 0001 - Core0 0x2 - 0010 - Core1 0x3 - 0011 - Core1 & Core0 0x4 - 0100 - Core2 0x5 - 0101 - Core2 & Core0 0x6 - 0110 - Core2 & Core1 0x7 - 0111 - Core2 & Core1 & Core0 0x8 - 1000 - Core3 0x9 - 1001 - Core3 & Core0 0xA - 1010 - Core3 & Core1 0xB - 1011 - Core3 & Core1 & Core0 0xC - 1100 - Core3 & Core2 0xD - 1101 - Core3 & Core2 & Core0 0xE - 1110 - Core3 & Core2 & Core1 0xF - 1111 - Core3 & Core2 & Core1 & Core0 
Ich denke, du hast die ersten 3 versaut Richie Frame vor 8 Jahren 1
Oh, verdammt .. ja :) Korrigiert .. The_aLiEn vor 8 Jahren 0
@The_aLiEn Frage: Wenn dieser Prozess einen anderen Prozess startet, erbt der zweite Prozess die Affinität des ersten Prozesses? Ich habe das gleiche Problem mit einem Spiel, aber ich muss die Affinität sowohl beim Launcher als auch beim Download-Manager eines Drittanbieters ändern, der vom Launcher gestartet wird, damit er gelöst wird. Nzall vor 8 Jahren 4
@NateKerkhofs: Ja, das sollte es. Ich habe einmal einen eigenen Wrapper mit Start-mit-Affinität erstellt, der nichts tat, außer seine eigene Affinität einzustellen und dann die Zielanwendung hervorzubringen. Ben Voigt vor 8 Jahren 0
Benötigen Sie den `cmd.exe / C`-Teil oder reicht es, um mit` start` zu beginnen? deltab vor 8 Jahren 2
@NateKerkhofs sollte es erben. Nicht nur Affinität, wie alle Sicherheitsbeschreibungen, Handlungen von Besitzern usw. The_aLiEn vor 8 Jahren 2
Danke vielmals! das hat mir geholfen, die Affinität in meinem C # -Programm zu ändern! ihavenokia vor 6 Jahren 0
7
Richie Frame

Wenn Sie unter "Nicht-Software" meinen, dass Sie keine zusätzliche Software benötigen, ist dies der Fall. Sie können das Programm über ein Befehlsskript ausführen und den Affinitätsschalter verwenden"Start /AFFINITY 20 process.exe"

/AFFINITY 20behandelt den 20Wert als Hexadezimalzahl mit einem binären Äquivalent von 100000, wodurch die Affinität zu Core 5 von 0-5 auf einem 6-Core-Prozessor festgelegt wird. Mit einer ähnlichen Hex-Maske können Sie einen bestimmten Kern deaktivieren, z. B. den E, der den Prozess nur auf den Kernen 1-3 von 0-3 oder 0-5 ausführt.

"Nicht-Software" bedeutet "cmd". Pacerier vor 8 Jahren 0
3
Jake

Für alle anderen, die nach Antworten suchen und keine finden, bestand die Lösung darin, eine App namens WinAFC (oder AffinityChanger) zu verwenden. Hierbei handelt es sich um eine teilweise GUI-Befehlsanwendung, die es Ihnen ermöglicht, Profile für bestimmte ausführbare Dateien anzugeben und die Prozessliste dafür abzufragen. Wenn passende Prozesse gefunden werden, ändert sich die Affinität dieser Prozesse entsprechend den Einstellungen im geladenen Profil.

Hier finden Sie einige Dokumentation: http://affinitychanger.sourceforge.net/

Für meine Zwecke habe ich ein Profil erstellt, das so aussah:

TestMode = 0 TimeInterval = 1 *\convert.exe := PAIR0+PAIR1 

Dieses Profil legt fest, dass der Prozess convert.exe die ersten zwei CPU-Kernpaare (CPU0, CPU1, CPU2 und CPU3) verwendet, die jede Sekunde abfragen. TestModeMit dieser Option können Sie sehen, ob Ihr Profil funktioniert, ohne Affinitäten festzulegen.

Hoffe, jemand findet das nützlich!