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

Geo*_*ge2 11 .net c# cpu affinity visual-studio-2008

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

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

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

乔治,提前谢谢

Gau*_*rav 13

  1. 转到任务管理器 - > 进程选项卡.
  2. 寻找你的计划.右键单击它.
  3. 选择" 设置亲和力",然后取消选中其中一个复选框.

这应该为您释放一个处理器.

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

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr) 1;
Run Code Online (Sandbox Code Playgroud)

干杯!

  • 试试这个:System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = 1; (2认同)
  • System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity =(System.IntPtr)1; 忘记了类型转换的时间:P (2认同)

mgh*_*hie 7

执行此操作的Windows API函数是SetProcessAffinityMask()SetThreadAffinityMask().我不知道这样的.NET我不能说是否有围绕这些函数的包装,但是似乎并非如此.

顺便说一句:我同意这些只在非常特殊的情况下是必要的,通常最好让OS调度程序处理它.这是其中一个问题,如果你不得不问如何,你可能不应该这样做.

  • 您可以从流程本身完成.最好从这篇MSDN文章开始:http://msdn.microsoft.com/en-us/magazine/cc300701.aspx#S11,它应该提供一些代码以及有用的背景信息. (3认同)

Bri*_*sen 3

实际上,您的应用程序不会使用多个 CPU,除非您专门采取一些措施来利用更多 CPU。如果您使用线程池和/或启动额外的线程,您可以使用额外的可用核心,但否则您的应用程序默认只有一个线程,因此只使用一个 CPU。