Заставить приложение C# использовать одно ядро на ПК с многоядерным процессором
Привет, ребята этот вопрос может показаться странным, но я использую haptek People Putty player для моего приложения c#, и я видел, как люди говорят на форумах, что он не работает хорошо с многоядерным процессором. Мое приложение хорошо работает на моем ноутбуке Core 2 Duo, но оно сильно отстает, когда я пытаюсь запустить его на четырехъядерном рабочем столе. Я думал исследовать это для себя, и в этом случае мне придется заставить мое приложение работать на одном ядре. Возможно ли это в C#? Спасибо!
3 ответов
где Process
переменная proc
удерживает процесс, о котором вы заботитесь (Process.GetCurrentProcess()
для запущенного процесса, получив от GetProcesses()
или GetProcessesByName()
etc. для другого процесса. Затем:
foreach(ProcessThread pt in proc.Threads)
{
pt.IdealProcessor = 0;
pt.ProcessorAffinity = (IntPtr)1;
}
IdealProcessor-это нулевая идентичность одного ядра. ProcessorAffinity-это битовая маска, поэтому 1 позволяет нулю ядра, 2 позволяет ядру один, 3 позволяет ядрам ноль и один, 4 позволяет ядру два и так далее.
Я бы проверил это тщательно. Шансы очень велики, что это фактически повредит вашей производительности, уменьшив возможность использования разных ядер, что в конечном итоге является преимуществом.
Если приложение однопоточное, оно не будет использовать преимущества нескольких ядер. Тем не менее, возможно, что ядро может столкнуться с потоком между ядрами. Я сомневаюсь, что это является причиной ваших проблем с производительностью.
Если вы хотите привязать нить к одному ядру (не уверен, что это можно гарантировать), вы можете проверить System.Diagnostics.ProcessThread.ProcessorAffinity
собственность, хотя я никогда не использовал его сам.
на самом деле невозможно в C#. Ну, я точно не знаю. Вам нужен interop, с этим он работает.
вы используете несколько потоков? Если нет-Хм-извините-не много вы можете сделать. Стандартные приложения UI не используют несколько ядер в любом случае.
в принципе, приложения, не использующие потоки (рабочие элементы используют потоки), по своей сути являются одноядерными.