Вынудите приложение C# использовать одноядерное в ПК с многоядерным процессором

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

7
задан Paul 7 August 2010 в 09:59
поделиться

3 ответа

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

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

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

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

4
ответ дан 7 December 2019 в 07:38
поделиться

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

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

2
ответ дан 7 December 2019 в 07:38
поделиться
  • На C # это невозможно. Ну, я не знаю. Вам нужен interop, с этим он работает.

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

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

1
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: