繁体   English   中英

处理器关联组C#

[英]processor affinity group C#

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

我的问题是如何强制我的.net应用程序使用组1或组2? 我不确定下面的链接是否会工作。

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

我确实尝试将其添加到我的配置中,但该应用仅使用组0,但我确实显示了此代码的所有内核。 我知道一种选择是去BIOS并选择展平,但是我不确定这是做事情的正确方法。

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

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

不需要PInvoke到SetProcessAffinityMask,因为Process类已经具有属性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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM