11

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

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

还有一点背景是,我的程序是 CPU 密集型的,所以我不想让它占用我电脑上的所有两个 CPU 资源,我想释放一个 CPU 以便我可以同时快速浏览网络。:-)

提前谢谢,乔治

4

3 回答 3

13
  1. 转到任务管理器->进程选项卡。
  2. 寻找你的程序。右键单击它。
  3. 选择设置关联并取消选中其中一个复选框。

这应该会为您腾出一个处理器。

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

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

干杯!

于 2009-06-27T07:25:47.327 回答
7

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

顺便说一句:我同意这些仅在非常特定的情况下是必需的,通常最好让操作系统调度程序来处理它。如果您必须问如何,这是您可能不应该这样做的问题之一。

于 2009-06-27T07:30:26.287 回答
3

实际上,您的应用程序不会使用超过一个 CPU,除非您专门做一些事情来利用更多的 CPU。如果您使用线程池和/或启动额外的线程,您可能会使用额外的可用内核,但否则您的应用程序默认只有一个线程,因此只使用一个 CPU。

于 2009-06-27T07:14:21.200 回答