Как установить сродство процессора программы? - PullRequest
11 голосов
/ 27 июня 2009

У меня есть программа, написанная на C #, я использую VSTS 2008 + .Net 3.5 + Windows Vista Enterprise x86 для разработки приложения Windows Forms.

Мой текущий компьютер - двухъядерный ЦП, я хочу установить привязку ЦП моей программы для запуска на определенном ЦП и освободить другой ЦП для выполнения какой-либо другой работы. Есть идеи, как это сделать? Либо с помощью кодирования или конфигурации в порядке.

Немного больше предыстории, моя программа интенсивно использует процессор, поэтому я не хочу, чтобы она занимала все два ресурса процессора на моем компьютере, и я хочу освободить один процессор, чтобы я мог быстро просматривать сеть одновременно. : -)

спасибо заранее, George

Ответы [ 3 ]

13 голосов
/ 27 июня 2009
  1. Перейти к Диспетчер задач -> Процессы * вкладка 1005 *.
  2. Ищите вашу программу. Щелкните правой кнопкой мыши по нему.
  3. Выберите Установить сходство и снимите один из флажков.

Это должно освободить для вас один процессор.

Для этого из кода вы можете добавить это утверждение:

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr) 1;

Ура!

7 голосов
/ 27 июня 2009

Функции Windows API для этого: SetProcessAffinityMask () и SetThreadAffinityMask () . Я не знаю .NET, так что я не могу сказать, есть ли обертки вокруг этих функций, но этот , кажется, предлагает иное.

Кстати: я согласен, что это необходимо только в очень специфических обстоятельствах, обычно лучше позволить планировщику ОС справиться с этим. Это один из тех вопросов, где вы, вероятно, не должны делать этого, если вам нужно спросить, как.

3 голосов
/ 27 июня 2009

На самом деле ваше приложение не будет использовать более одного процессора, если вы специально не сделаете что-то, чтобы использовать больше процессоров. Если вы используете пул потоков и / или запускаете дополнительные потоки, вы можете использовать дополнительные доступные ядра, но в противном случае ваше приложение будет иметь только один поток по умолчанию и, следовательно, использовать только один ЦП.

...