PLINQ可能是下一代.NET Framework 4.0 的內建功能(Parallel FX Library, PFX)之一,它包含了Parallel LINQ (PLINQ) and Task Parallel Library (TPL),再搭配F#,下一代能帶給程式設計師提升效能及減少程式複雜的好特性實在不少。

從它的字義上,我們可以知道它是用來做平行處理。針對哪部分做處理呢?主要是針對LINQ to Objects以及LINQ to XML作並行的處理。它提供了並行處理的類別以及方法,讓你過去操作thread以及同步所需處理的複雜程式碼簡化。類別及方法在System.Threading這個組件中實作。
接下來,我以一個簡單的範例來作說明:
1. 首先,開啟一個Console專案,然後在專案中引用System.Threading 這個dll 組件。
2. 我們輸入下列的程式碼:
string[] words = new[] { "Hello", "World", "PLINQ", "IS", "Very", "NOT", "BAD", "!!", "Test", "GOOD" };
var MyQuery = from word in words select word;
foreach (string str in MyQuery)
{
Console.Write(str + '\n');
}
Console.Read();
然後,根據處理器循序處理的特性,我們可以看到輸出的結果的順序如下(如同在陣列中的順序):
3. 變更成PLINQ的寫法:
string[] words = new[] { "Hello", "World", "PLINQ", "IS", "Very", "NOT", "BAD", "!!", "Test", "GOOD" };
var MyQuery = from word in words.AsParallel() select word;
MyQuery.ForAll(word => { Console.WriteLine(word); });
Console.Read();
然後我們去查看"單一個CPU"的呈現情形,看來是跟原來循序處理一樣。

如果我們把這個執行檔放到一個擁有雙核CPU的電腦上,執行的結果如下圖:

我們可以看到,透過平行處理,把這個陣列分成兩部分處理,一部分是NOT, Hello, World, PLINQ, IS, Very,另一部分則是BAD, !!, Test, GOOD。
如果你再運行一次,你會發現執行的順序變得不一樣了,因為在平行處理時,會切割成兩部分(如果是雙核心CPU)作處理,但不是每次順序都一樣。

4. 如果放在四核心的CPU上執行,執行的順序就更複雜了。(執行了三次,順序都不一樣)


隨著硬體的功能提升,如何充分利用硬體來加速軟體? 微軟打算在下一代Framework中,透過平行運算充分的利用到硬體作加速及效能的提升。
未來這個系列將會介紹PLINQ的一些相關特性。
注意:基於是CTP版本,微軟在PLINQ功能上隨時仍會作調整。
讚!
回覆刪除加油! LoLoTa!
首先 先跟您說聲對不起 因為我這篇文章跟你PO的內容是不相關的 (因為我找不到怎樣可以留言的方式 來請教您問題)
回覆刪除這是我的問題
想請問一下關於 頁籤的問題
HeaderTemplate>
test1
/HeaderTemplate>
關於這個地方...我想請問一下 這樣你可以把 頁籤變成 test1 這個我懂
但是想請問一下 如果這個是動態從資料庫要撈出來的資料呢 而且可能有很多個 頁籤 就要同時動態新增
cc1:TabPanel ID="TabPanel3" runat="server" HeaderText="TabPanel3">
cc1:TabPanel>
cc1:TabPanel ID="TabPanel4" runat="server" HeaderText="TabPanel4">
/cc1:TabPanel>
然後放進去不同的頁籤名稱 而不是用 拉的(Design就拉好的呢)..
請問一下我應該要怎樣寫呢 ??
或是有其他可以參考的網址或是其他資料呢??
另外我有找到一篇關於您的回文
http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=2584403&SiteID=14
我有看 但是我用過不行 = =
因為我找嚕滿多的文章 但是都沒有人說這個頁籤要動態產生而且要在 ContentTemplate>
放一個 Gridview
/ContentTemplate>
還是說他根本就不能動態產生呢??
謝謝你 的幫忙 感激 ^^
您可以參考下列做法,可能是沒有設定ActiveTab, 所以畫面不會出現相關控制項:
回覆刪除Protected Sub TabContainer1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabContainer1.Load
Dim tb1 As New TabPanel
tb1.ID = "tab1"
tb1.HeaderText = "Tab1"
tb1.Width = 10
Dim bt As New Button
bt.Text = "Hello"
tb1.Controls.Add(bt)
Dim tb2 As New TabPanel
tb2.ID = "tab6"
tb2.HeaderText = "Tab2"
tb2.Width = 10
Dim Gv As New GridView
Dim ar As New ArrayList
ar.Add(10)
ar.Add(20)
ar.Add(40)
Gv.DataSource = ar
Gv.DataBind()
tb2.Controls.Add(Gv)
CType(sender, TabContainer).Tabs.Add(tb1)
CType(sender, TabContainer).Tabs.Add(tb2)
CType(sender, TabContainer).ActiveTab = tb1
End Sub