эквивалент "start / affinity" в .NET - PullRequest
3 голосов
/ 04 июня 2010

Команда оболочки Windows start (в cmd.exe), по-видимому, может запустить процесс с выбранной привязкой процессора, вместо запуска процесса , а затем , установив выбранное сродство процессора через некоторый (небольшой) промежуток времени после его запуска.

start /affinity 2 something.exe

Есть ли способ сделать то же самое из приложения .NET с использованием или без использования P-Invoke? Вызов cmd.exe /C start ... не считается.

Класс Process имеет свойство ProcessorAffinity, но выдает InvalidOperationException, если вы попытаетесь установить его до вызова метода Start.

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Я подозреваю, что команда запуска в этом случае запускает приостановленный процесс (т. Е. Передает CREATE_SUSPENDED при вызове CreateProcess), затем устанавливает привязку процессора, затем возобновляет поток.

Таким образом, пока процесс существует без установленной привязки процесса, к моменту его запуска выполняется привязка процессора установлена, поэтому он выполняется толькона назначенном процессоре.

1 голос
/ 04 июня 2010

Я не думаю, что вы можете установить привязку процессора до запуска процесса, потому что первый параметр SetProcessAffinityMask Function является дескриптором процесса.

С другой стороны, есть программа под названием Imagecfg , которая позволяет постоянно устанавливать привязку процессора к исполняемому файлу, но я не уверен, как он работает.

...