.net应用程序多线程

时间:2009-04-04 19:21:52

标签: c# multithreading

我有一个多核cpu,但我写的.net app只使用其中一个核心。当该选项可用时,如何让它使用多个核心。

4 个答案:

答案 0 :(得分:7)

这不是免费的。使用多个核心需要使用多个线程。您必须明确地向程序添加线程支持,以便同时使用多个核心。

这是一篇很棒的文章,探讨如何使用任务并行库(也称为parallel extensions framework)利用托管代码来利用多个内核。

http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

答案 1 :(得分:4)

您可以像JaredPar提到的那样试用Microsoft Parallel Extensions to .NET Framework 3.5,或者自己创建程序的多线程版本。

我想在这里添加一个更具体的例子,说明从现有程序转换“for-loop”以使用Parallel Extension中的System.Threading.Parallel是多么容易。对于for循环,检查0到maxnum之间的每个素数:

System.Threading.Parallel.For(0, maxNum + 1, x => IsPrime(x));  

很简单,不是吗?

我还对从System.Parallel获得的性能改进进行了简单的基准测试。如果我发布一个指向我的博客here的链接,我希望其他同行不要介意。

alt text

答案 2 :(得分:0)

@JaredPar给出excellent answer。但在某些情况下,我们可能不值得将代码重写为多线程。多线程代码更复杂,并添加了大量其他类型的错误来与之搏斗。

然而,在桌面应用程序的简单情况下,有时值得将双核心机器的第二个核心免费使用,以便操作系统可以使用它来重新绘制其他应用程序的屏幕,运行病毒扫描程序等

不是你特别想听到的答案,但在某些情况下却是务实的答案。

答案 3 :(得分:0)

将您的时间密集型工作分配给多个线程。

多线程的建议方法是使用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.");
    }
}
相关问题