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

StackOverflow https://stackoverflow.com/questions/3429999

  •  26-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Где 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 разрешает второе ядро ​​и т. д.

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

Другие советы

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

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

  • Не совсем возможно в C #. Ну, никак не знаю. Вам нужен взаимодействие, с этим работает.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top