2013-06-28 36 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#中並行編程的實用示例。 –