处理器关联组 C#

processor affinity group C#

我使用的是 Windows Server 2016 72 核。我看到有 2 组处理器。我的 .net 应用程序将使用一个或其他组。我需要能够强制我的应用程序使用我选择的组。 我在下面看到一个代码示例,但我无法使其工作。我可能传递了错误的变量。我希望应用程序选择第 1 组和所有处理器,然后选择第 2 组和所有处理器。

我的问题是如何强制我的 .net 应用程序使用第 1 组或第 2 组?我不确定下面的 link 是否有效。

https://gist.github.com/alexandrnikitin/babfa4781c68f1664d4a81339fe3a0aa

我确实尝试将此添加到我的配置中,但该应用程序仅使用组 0,但我确实使用此代码显示了所有内核。我知道一个选项是进入 bios 并选择展平,但我不确定这是正确的做法。

   <Thread_UseAllCpuGroups enabled="true"/>  
      <GCCpuGroup enabled="true"/>  
      <gcServer enabled="true"/> 

发布的示例仅将当前线程设置为 CPU 处理器组。但是您想为进程的所有线程设置它。您需要为您的流程调用 SetProcessAffinityMask。

不需要 PInvoke 到 SetProcessAffinityMask 因为 Process class 已经有一个 属性 ProcessorAffinity 让你直接设置它。

class Program
{
    static void SetProcessAffinity(ulong groupMask)
    {
        Process.GetCurrentProcess().ProcessorAffinity = new IntPtr((long)groupMask);
    }
    static void Main(string[] args)
    {
        SetProcessAffinity(1);    // group 0
        // binary literals are a C# 7 feature for which you need VS 2017 or later.
        SetProcessAffinity(0b11); // Both groups 0 and 1 
        SetProcessAffinity(0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111); // for all cpu groups all 64 bits enabled
    }
}