C#将应用程序/服务限制为CPU插槽/核心数量?

时间:2018-05-15 09:05:34

标签: c# .net

例如,SQL Server许可证模型仅限于cpu套接字/核心数量:

https://docs.microsoft.com/en-us/sql/sql-server/compute-capacity-limits-by-edition-of-sql-server?view=sql-server-2017

SQL Server edition
Maximum compute capacity for a single instance ( SQL Server Database Engine)
Enterprise Edition: Core-based Licensing*
Operating system maximum
Developer
Operating system maximum
Standard
Limited to lesser of 4 sockets or 24 cores
Express
Limited to lesser of 1 socket or 4 cores

如何在C#/ .NET中限制应用程序或Windows服务的套接字或内核数量?

设置处理器亲和性/线程关系是唯一的方法(可以通过任务管理器轻松绕过(ctrl + shift + esc))

(P.S。:问题不在于这样做是否是个好主意,正如在其他问题中看到的那样)。

1 个答案:

答案 0 :(得分:1)

当你编写一个简单的“hello world”c#程序时,它运行在一个OS线程和一个核心上。

如果你想坚持一个核心,就不要产生任何线程或使用任何任务。

您可以使用ThreadPool.SetMaxThreads限制标准工作者ThreadPool的并列性。有些库可能会创建自己的线程池或自己的工作线程。因此,您需要更加具体地了解您的计划,以便获得更完整的答案。

如果要限制自己使用特定处理器,还必须调整进程和线程的处理器关联。有关如何执行此操作,请参阅this question。 我不知道你是否可以调整ThreadPool线程的亲和力。