如何永久设置进程的亲和性?

yur*_*uki 20 task-manager affinity windows-8.1

我有一款游戏存在 CPU 使用率问题,因此修复方法之一是禁用四核 CPU 中的一个核。由于每次启动游戏时我都必须手动进入任务管理器并手动输入关联,这很糟糕,因为游戏是新发布的,但容易频繁崩溃。

有非软件解决方案吗?

我在网上查找了一些解决方案,它们似乎仅适用于 Windows 7。像我这样的 Windows 8.1 用户有解决方案吗?

Has*_*zak 27

您可以创建快捷方式来分配关联。

X:\Windows\System32\cmd.exe /C start /affinity Y game.exe
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • @The_aLiEn 问题:如果这个进程启动另一个进程,那第二个进程是否继承了第一个进程的亲和性?我在游戏中遇到了同样的问题,但我需要更改启动器和由启动器启动的 3rd 方下载管理器的关联性才能解决。 (6认同)
  • @NateKerkhofs 它应该继承。不仅仅是亲和性,就像所有安全描述符、拥有的句柄等。 (3认同)
  • 我想你把前三个搞砸了 (2认同)
  • 你需要`cmd.exe /C` 部分,还是从`start` 开始就足够了? (2认同)

Ric*_*ame 7

如果“非软件”是指不需要额外的软件,那就是。您可以从命令脚本运行程序并使用关联开关"Start /AFFINITY 20 process.exe"

/AFFINITY 2020视为十六进制数,二进制等效于100000,这将在 6 核处理器上设置与 0-5 中的核心 5 的亲和性。类似的十六进制掩码可以让您禁用特定的核心,例如E,它仅在 0-3 或 0-5 中的 1-3 核心上运行进程。


Jak*_*ake 6

对于其他人正在寻找答案但没有找到答案,我找到的解决方案是使用名为WinAFC(或 AffinityChanger)的应用程序。这是一个部分 GUI、部分命令行应用程序,它允许您为某些可执行文件指定配置文件,并将轮询它们的进程列表。如果找到匹配的进程,它将根据加载的配置文件中的设置更改这些进程的关联。

这里有一些文档:http : //affinitychanger.sourceforge.net/

出于我的目的,我创建了一个如下所示的配置文件:

TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1
Run Code Online (Sandbox Code Playgroud)

此配置文件将任何 convert.exe 进程设置为使用前两个 CPU 内核对(CPU0、CPU1、CPU2 和 CPU3),每秒轮询一次。TestMode是一个切换开关,可让您查看您的个人资料是否正常工作,而无需实际设置关联。

希望有人觉得这很有用!