2013-06-28 38 views
0

当我使用​​:TPL似乎并没有提高执行速度在MSDN例如

var queryA = from num in numberList.AsParallel() 
      select ExpensiveFunction(num); //good for PLINQ 

var queryB = from num in numberList.AsParallel() 
      where num % 2 > 0 
      select num; //not as good for PLINQ 

我的示例程序:

static void Main(string[] args) 
{ 
    // ThreadPool.SetMinThreads(100, 100); 

     var numberList = new List<int>(); 
     for (int i = 0; i <= 1000; i++) 
     { 
      numberList.Add(i); 
     } 
     Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     var queryA = from num in numberList 
        select ExpensiveFunction(num); //good for PLINQ 
     var c = queryA.ToList<int>(); 
     sw.Stop(); 
     Console.WriteLine(sw.ElapsedMilliseconds); 
     sw.Reset(); 
     sw.Start(); 
     var queryB = from num in numberList.AsParallel() 
        select ExpensiveFunction(num); //good for PLINQ 
     c = queryB.ToList<int>(); 
     sw.Stop(); 
     Console.WriteLine(sw.ElapsedMilliseconds); 
     Console.ReadKey(); 
} 

static int ExpensiveFunction(int a) 
{ 
    a = a + 100 - 9 + 0 + 98; 
    // Console.WriteLine(a); 
    return a; 
} 

结果是:

7 
41 

为什么使用AsParallel()比不使用它慢?

+2

'a + = 189;'是**不**昂贵的计算。 – spender

回答

2

您的ExpensiveFunction真的不是一个昂贵的计算机功能。

简单的数学可以做得非常快。

也许试试Thread.Sleep(500);。这将告诉CPU暂停半秒钟,这将模拟实际的昂贵功能的效果。

编辑 —我应该声明,它是比较慢的原因是因为开销并行处理涉及比实际的计算更多的工作。 See this answer for a better explanation

+0

谢谢你的回答。你好。我没有理解。 Hiiiiiiiiiiiiiiiii – user2532263

+0

@ user2532263检出http://www.linqpad.net/RichClient/SampleLibraries.aspx“C#5中的异步”提供了一些C#中并行编程的实用示例。 –