Принудительное использование приложения C# одного ядра на ПК с многоядерным процессором
-
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 #. Ну, никак не знаю. Вам нужен взаимодействие, с этим работает.
Вы используете несколько потоков? Если нет - хм - извините - не много вы можете сделать. Стандартные пользовательские пользовательские устройства в любом случае не используют несколько сердечников.
В основном, приложения, не использующие резьбы (рабочие элементы, использующие потоки), в любом случае, в любом случае одно ядро.