我有一个游戏存在 CPU 使用率问题,因此解决方法之一是禁用四核 CPU 中的一个核心。每次启动游戏时,我都必须手动进入任务管理器并手动输入亲和力,这很糟糕,因为游戏刚刚发布但容易频繁崩溃。
有没有非软件解决方案?
我在网上查找了一些解决方案,它们似乎只适用于 Windows 7。有没有适合像我这样的 Windows 8.1 用户的解决方案?
答案1
您可以创建一个快捷方式来分配亲和力。
X:\Windows\System32\cmd.exe /C start /affinity Y game.exe
Y
是十六进制并且是位掩码:
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
答案2
如果“非软件”是指不需要额外的软件,那么有。您可以从命令脚本运行该程序并使用亲和性开关"Start /AFFINITY 20 process.exe"
/AFFINITY 20
将 视为20
十六进制数,其二进制等效值为100000
,这将在 6 核处理器上将亲和性设置为 0-5 中的第 5 个核心。类似的十六进制掩码将允许您禁用特定核心,例如E
,它仅在 0-3 或 0-5 中的第 1-3 个核心上运行进程。
答案3
对于其他正在寻找答案却找不到答案的人来说,我找到的解决方案是使用一个名为的应用程序温亚足联(或 AffinityChanger)。这是一个部分 GUI、部分命令行应用程序,允许您为某些可执行文件指定配置文件,并将轮询它们的进程列表。如果找到匹配的进程,它将根据加载的配置文件中的设置更改这些进程的亲和性。
这里有一些文档:http://affinitychanger.sourceforge.net/
为了我的目的,我创建了一个如下所示的个人资料:
TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1
此配置文件将任何 convert.exe 进程设置为使用前两个 CPU 核心对 (CPU0、CPU1、CPU2 和 CPU3),每秒轮询一次。这TestMode
是一个切换开关,可让您查看配置文件是否正常工作,而无需实际设置亲和性。
希望有人觉得这有用!
答案4
我是新来的,第一次在这个论坛上发帖,但无论如何,我已经创建了这个图表,它使它更容易理解,只需在命令行中输入十六进制值 Y 即可启用 CPU 线程数。尽情享受吧!
CPU - HEX - BINARY
00 -- 1 ---- 0001
01 -- 3 ---- 0011
02 -- 7 ---- 0111
03 -- F ---- 1111
04 -- 1F --- 0001 1111
05 -- 3F --- 0011 1111
06 -- 7F --- 0111 1111
07 -- FF --- 1111 1111
08 -- 1FF -- 0001 1111 1111
09 -- 3FF -- 0011 1111 1111
10 -- 7FF -- 0111 1111 1111
11 -- FFF -- 1111 1111 1111
12 -- 1FFF - 0001 1111 1111 1111
13 -- 3FFF - 0011 1111 1111 1111
14 -- 7FFF - 0111 1111 1111 1111
15 -- FFFF - 1111 1111 1111 1111
%ComSpec% /c start /affinity Y game.exe