我有一颗多核心的CPU,但我写的.NET应用程序只使用其中一个核心。当此选项可用时,如何使其使用多个核心。
maxnum
之间每个素数的for循环:System.Threading.Parallel.For(0, maxNum + 1, x => IsPrime(x));
很容易,是吧?
我还进行了一项有关 System.Parallel 性能改进的简单基准测试。我希望 SO 同行不介意我在这里发布我的博客链接:这里。
将耗时的任务分派到多个线程中。
使用ThreadPool是实现多线程的建议方式。
以下是MSDN提供的ThreadPool示例:
using System;
using System.Threading;
public class Example {
public static void Main() {
// Queue the task.
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
Thread.Sleep(1000);
Console.WriteLine("Main thread exits.");
}
// This thread procedure performs the task.
static void ThreadProc(Object stateInfo) {
// No state object was passed to QueueUserWorkItem, so
// stateInfo is null.
Console.WriteLine("Hello from the thread pool.");
}
}
@JaredPar 给出了一个优秀的答案。然而,在某些情况下,重写代码以实现多线程可能并不值得。多线程代码更加复杂,并且增加了一整套额外的错误类型需要解决。
然而,在桌面应用程序的简单情况下,有时候值得将双核机器的第二个核心空闲下来,这样操作系统就可以利用它来做其他应用程序的屏幕重绘、运行病毒扫描等任务。
这可能不是你想听到的答案,但在某些情况下,这是一种务实的选择。