Есть ли параметр, который можно изменить (или добавить регистрационный ключ), чтобы установить привязку к процессору службы? Я бы хотел установить привязку и сохранить эту настройку при перезагрузках (поэтому изменение привязки вручную после запуска службы для меня не сработает).
Некоторые службы, такие как IIS, созданы с возможностью считывать битовую маску из реестра и использовать ее для установки собственной привязки к процессору при запуске, но это не является особенностью каждой службы.
Я бы, вероятно, создал задачу, которая запускается по событию, и событием будет «Служба MyService запущена» ... в журнале системных событий. Затем задача запустит этот код Powershell:
# TODO: Add error checking
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
public class Affinity
{
[DllImport("kernel32.dll")]
static extern bool SetProcessAffinityMask(IntPtr Handle, UIntPtr AffinityMask);
public static void SetAffinity(IntPtr Handle, UIntPtr AffinityMask)
{
SetProcessAffinityMask(Handle, AffinityMask);
}
}
'@
$Process = Get-Process MyService
If (-Not($Process))
{
Return
}
# This is a bitmask.
$AffinityMask = New-Object UIntPtr 1
# TODO: Foreach loop to set affinity for each instance of the process
[Affinity]::SetAffinity($Process.Handle, $AffinityMask)
РЕДАКТИРОВАТЬ: Ха-ха, извини, это намного сложнее, чем должно быть. Powershell уже имеет эту встроенную возможность, просто выполнив:
$Process = Get-Process MyService
$Process.ProcessorAffinity = 1
Битовая маска означает, что десятичное значение 1 означает «только первый ЦП», десятичное значение 2 (двоичное 10) означает «только второй ЦП», десятичное значение 3 (двоичное 11) означает «ЦП 1 и 2», и так далее и тому подобное.