Привет парни, этот вопрос мог бы казаться странным, но я использую Людей Haptek плеер Шпаклевки для моего приложения C# и я видел, что люди говорят на форумах, что это не работает хорошо с многоядерным процессором. Мое выполнение приложения хорошо на моем ноутбуке Core 2 Duo, но это отстает много, когда я пытаюсь выполнить его на Четырехъядерном рабочем столе. Я думал об исследовании этого для меня и в этом случае, я должен буду вынудить свое приложение работать на одноядерном. Это возможно в C#?Спасибо!
Где 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 разрешает ядро два и т. д.
Я бы проверил это тщательно . Очень велики шансы, что это действительно снизить вашу производительность, уменьшив возможность использования различных ядер, что, в конце концов, в целом является преимуществом.
Если приложение однопоточное, оно не будет использовать преимущества нескольких ядер. Однако возможно, что ядро может перемещать поток между ядрами. Я сомневаюсь, что это является причиной ваших проблем с производительностью.
Если вы хотите привязать поток к одному ядру (не уверен, что это можно гарантировать), вы можете проверить свойство System.Diagnostics.ProcessThread.ProcessorAffinity
, хотя я сам никогда его не использовал.
На C # это невозможно. Ну, я не знаю. Вам нужен interop, с этим он работает.
Вы используете несколько потоков? Если нет - хм - извините, вы мало что можете сделать. В любом случае стандартные приложения пользовательского интерфейса не используют несколько ядер.
По сути, приложения, не использующие потоки (рабочие элементы используют потоки), в любом случае являются одноядерными.