Заставить приложение C # использовать одно ядро ​​в ПК с многоядерным процессором - PullRequest
7 голосов
/ 07 августа 2010

Привет, ребята, этот вопрос может показаться странным, но я использую проигрыватель Haptek People Putty для своего приложения на C #, и я видел, как на форумах люди говорят, что он не работает с многоядерным процессором. Мое приложение хорошо работает на моем ноутбуке Core 2 Duo, но оно сильно отстает, когда я пытаюсь запустить его на Quad Core. Я думал о том, чтобы исследовать это для себя, и в этом случае мне пришлось бы заставить свое приложение работать на одном ядре. Это возможно в C #? Спасибо!

Ответы [ 3 ]

4 голосов
/ 07 августа 2010

Где Process переменная proc содержит интересующий вас процесс (Process.GetCurrentProcess() для запущенного процесса, получение его из GetProcesses() или GetProcessesByName() и т. Д. Для другого процесса. Затем:

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor - это идентичность одного ядра с нуля. ProcessorAffinity является битовой маской, поэтому 1 допускает нулевое ядро, 2 разрешает ядро ​​одно, 3 допускает нулевое ядро ​​и одно, 4 разрешает ядро ​​два и т. Д.

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

2 голосов
/ 07 августа 2010

Если приложение однопоточное, оно не будет использовать преимущества нескольких ядер.Тем не менее, возможно, что ядро ​​может перемещаться между ядрами.Я сомневаюсь, что это является причиной ваших проблем с производительностью.

Если вы хотите связать поток с одним ядром (не уверен, можно ли это гарантировать), вы можете проверить свойство System.Diagnostics.ProcessThread.ProcessorAffinity, хотя я никогда не использовал его сам.

1 голос
/ 07 августа 2010
  • На самом деле невозможно в C #. Ну, я никак не знаю. Вам нужно взаимодействие, с этим оно работает.

  • Используете ли вы несколько потоков? Если нет - хм - извините - не так много вы можете сделать. Стандартные приложения пользовательского интерфейса в любом случае не используют несколько ядер.

По сути, приложения, не использующие потоки (рабочие элементы используют потоки), в любом случае по сути являются одноядерными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...