The actual performance benefit from locking an old application to a single core is very minimal, so this advice is mostly for the old applications that actually crashes when run on a multi core computer. It can also be a possible solution if the timing in a game is a bit off, or there are sound delays.
Set process affinity using the Task ManagerBy launching the Task Manager (CTRL+SHIFT+ESC) then one can right-click any running process and choose "Set Affinity...". The change will last until the process stops, and will not be remembered the next time the process starts.
It is an easy way to check if an issue can be solved using process affinity. But some games might not handle the switch from fullscreen to Task Manager and back again without crashing.
Set process affinity using 3rd party application.
- PsExec - Launches the application with the wanted process affinity.
- StartAffinity - Works like PsExec.
- THG Task Assignment Manager - Detects when an application is launched and applies the wanted process affinity.
- Core Affinity - Works like THG Task Assignment.
- CPU Control - Works like THG Task Assignment.
- SMP Seesaw - Works on Windows NT4.
Set process affinity by modifying the executableimagecfg.exe is part of the Microsoft support tools and resource kits and can modify an application to use the wanted process affinity.
imagecfg -a 0x1 c:\folder\myapp.exe
Set process affinity programmatically
Locking the MSDOS subsystem to a single CPULike all other processes the MSDOS subsystem can also be moved between CPU's. But where some applications can perform worse when between switched between CPU's, then it can actually cause the MSDOS subsystem to crash or lock entirely.
If going down the road of modifying the executable, then one will see that on Windows 2000/XP that ntvdm.exe is protected by Windows File Protection. The solution is to move the ntvdm.exe to another folder and modify this, and the change the registry to use the modified version:
Credits Ask the Performance Team
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \WOW]
CmdLine = "..."
WowCmdLine = "..."