看到tu豆关于多核CPU的使用。也就借鉴过来。虽然是不同的技术,不同的系统,但原理是一个。就是有效的控制CPU的使用,特别是多核时代。
先看看MSSQL2005在多核的情况下的设置

再来看看我的实现:一台系统上跑了几个关键作业。如果我有2个核,我希望分配给指定应用指定的CPU(多核还是多CPU不在此讨论)。
A应用程序有两个线程:
ThreadStart ts = new ThreadStart(ThreadHandler);
Thread thread = new Thread(ts);
thread.IsBackground = true;
thread.Start();
ThreadStart ts1 = new ThreadStart(ThreadHandler1);
Thread thread1 = new Thread(ts1);
thread1.IsBackground = true;
thread1.Start();
这种情况下CPU可是100%的使用率。2核的CPU已经无法进行别的操作。

而如果使用下面的代码CPU将一直控制在50%(只在一个核上运行),效果很满意。
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1;
ThreadStart ts = new ThreadStart(ThreadHandler);
Thread thread = new Thread(ts);
thread.IsBackground = true;
thread.Start();
ThreadStart ts1 = new ThreadStart(ThreadHandler1);
Thread thread1 = new Thread(ts1);
thread1.IsBackground = true;
thread1.Start();
有了这样的控制,你的某些耗时长的应用就可以很好的解决了。

同时感谢 Ricky、金两位的帮忙。
用于测试的辅助代码
ManagementClass m = new ManagementClass(“Win32_Processor”);
ManagementObjectCollection mn = m.GetInstances();
Console.WriteLine(“CPU个数:” + mn.Count.ToString());
ManagementObjectSearcher MySearcher = new ManagementObjectSearcher(“SELECT * FROM Win32_Processor”);
foreach (ManagementObject MyObject in MySearcher.Get())
{
Console.WriteLine(“主频:” + MyObject.Properties["CurrentClockSpeed"].Value.ToString());
}