如何设置程序的CPU亲和力?

时间:2009-06-27 07:09:31

标签: c# .net visual-studio-2008 cpu affinity

我有一个用C#编写的程序,我使用的是VSTS 2008 + .Net 3.5 + Windows Vista Enterprise x86来开发Windows窗体应用程序。

我当前的计算机是双核CPU,我想设置我的程序的CPU亲和力,以便在特定的CPU上运行,并释放另一个CPU来完成其他工作。任何想法如何做到这一点?通过编码或配置都可以。

更多的背景是,我的程序是CPU密集型的,所以我不想让它占用我计算机上的所有两个CPU资源,我想释放一个CPU,以便我可以快速浏览网络。 : - )

提前谢谢, 乔治

3 个答案:

答案 0 :(得分:13)

  1. 转到任务管理器 - > 流程标签。
  2. 寻找您的计划。右键单击它。
  3. 选择设置亲和力,然后取消选中其中一个复选框。
  4. 这应该为您释放一个处理器。

    要从代码中执行此操作,您可以添加以下语句:

    System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr) 1;
    

    干杯!

答案 1 :(得分:7)

执行此操作的Windows API函数是 SetProcessAffinityMask() SetThreadAffinityMask() 。我不知道.NET所以我不能说这些函数是否有包装器,但this似乎暗示其他。

BTW:我同意这些仅在非常具体的情况下是必要的,通常最好让操作系统调度程序处理它。这是其中一个问题,如果你不得不问如何,你可能不应该这样做。

答案 2 :(得分:3)

实际上,除非您专门使用更多CPU,否则您的应用程序不会使用多个CPU。如果您使用线程池和/或启动其他线程,您可以使用其他可用内核,但是否则您的应用程序将默认只有一个线程,因此只使用一个CPU。