Настройка реестра или использование Process.ProcessorAffinty напрямую изменяют планировщик процессов Windows. Это плохая практика, так как она зависит от платформы и, кроме того, может привести к программному поведению, которое трудно определить причину. Если возможно, гораздо лучше сделать это через саму .NET без использования оболочек PInvoke, таких как System.Diagnostics.Process.
Если вы хотите, чтобы ваше приложение использовало только один поток, я предлагаю настроить сборщик мусора не одновременно, добавив в свой файл app.config следующее:
<configuration>
<runtime>
<gcConcurrent enabled="false"/>
</runtime>
</configuration>
Для получения дополнительной информации см. Мой пост на эту тему здесь .
Если вы хотите установить явные ограничения на верхнюю и нижнюю границы числа потоков, лучше всего использовать объект ThreadPool . Используя SetMaxThreads и SetMinThreads , вы можете безопасно применять эти ограничения, не касаясь системного планировщика Windows.
Единственным существенным ограничением использования ThreadPool является то, что при использовании этого метода вы не можете установить минимальное количество потоков, которое будет меньше числа процессоров на вашем компьютере.