最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C#提高LINQ運(yùn)行效率的PLINQ

2023-07-05 16:55 作者:波波0077  | 我要投稿

首先來了解一下什么是Plinq,我們來看看官方的描述:并行 LINQ (PLINQ) 是語言集成查詢 (LINQ) 模式的并行實(shí)現(xiàn)。PLINQ 將整套 LINQ 標(biāo)準(zhǔn)查詢運(yùn)算符實(shí)現(xiàn)為 System.Linq 命名空間的擴(kuò)展方法,并提供適用于并行操作的其他運(yùn)算符。PLINQ 將 LINQ 語法的簡潔和可靠性與并行編程的強(qiáng)大功能結(jié)合在一起。


這里有兩個(gè)關(guān)鍵詞,一個(gè)是“并行”,另一個(gè)是“擴(kuò)展”,所謂并行是相對于程序順序來說說的,LINQ是順序執(zhí)行的,而PLINQ的并行執(zhí)行彌補(bǔ)了LINQ同步執(zhí)行的效率,當(dāng)然根據(jù)使用情況的不同來選擇,比如數(shù)據(jù)量很小就體現(xiàn)不出PLINQ的優(yōu)勢了。擴(kuò)展講述了PLINQ是LINQ的擴(kuò)展方法,也就是LINQ能特性PLINQ都具有。區(qū)別在于,PLINQ 會嘗試充分利用系統(tǒng)上的所有處理器。方法是將數(shù)據(jù)源分區(qū)成片段,然后在多個(gè)處理器上針對單獨(dú)工作線程上的每個(gè)片段執(zhí)行并行查詢。在許多情況下,并行執(zhí)行意味著查詢運(yùn)行速度顯著提高。


如何使用


使用很簡單,就是在數(shù)據(jù)源后面添加調(diào)用 ParallelEnumerable.AsParallel 擴(kuò)展方法, 這里我們用例子來看PLINQ的使用,需求是查詢10萬內(nèi)的隨機(jī)數(shù),如下:

效果對比

是不是很簡單,接下來我們用PLINQ與順序執(zhí)行的LINQ對比一下使用效率,需求很簡單,就是定義個(gè)dog對象,然后用Parallel.For并行寫入字典,分別用linq和plinq查詢出來,上代碼:

最好用release運(yùn)行,筆者用debug模式未測出差距,耗時(shí)如下圖,明顯看出PLINQ的效率是LINQ的一倍多。

在運(yùn)行時(shí),PLINQ 基礎(chǔ)結(jié)構(gòu)將分析查詢的總體結(jié)構(gòu)。如果通過并行可能會提高查詢速度,PLINQ 則將源序列分區(qū)為可以同時(shí)運(yùn)行的任務(wù)。如果并行化查詢不安全,PLINQ 則只會按順序運(yùn)行查詢。如果 PLINQ 可以在可能會較昂貴的并行算法或成本較低的順序算法之間進(jìn)行選擇,它會默認(rèn)選擇順序算法。


PLINQ使用的其它特性


1、使用 AsSequential,如果你不想在過程使用并行查詢,可以用此特性還原成順序查詢。

2、使用AsOrdered ,由于PLINQ是并行運(yùn)行,所以結(jié)果可能不是按照順序來,這是可以添加AsOrdered方法來查詢。

3、使用WithDegreeOfParallelism,此屬性可以設(shè)置電腦并行的CUP數(shù)。

這是常用的特性,其他特性請查看官方文檔。


使用注意要點(diǎn)


在很多情況下,可以并行化查詢,但是設(shè)置并行查詢的開銷可能會超出獲得的性能收益。如果查詢不執(zhí)行大量的計(jì)算,或者如果數(shù)據(jù)源較小,則 PLINQ 查詢的速度可能比順序 LINQ to Objects 查詢的速度慢。PLINQ不支持LINQ to sql 只針對內(nèi)存對象使用。確保并行執(zhí)行的循環(huán)線程是安全的,盡量避免在lock中執(zhí)行任務(wù)等待。使用的時(shí)候注意選擇。




C#提高LINQ運(yùn)行效率的PLINQ的評論 (共 條)

分享到微博請遵守國家法律
彩票| 满城县| 红原县| 进贤县| 黑河市| 江门市| 大化| 广宗县| 惠州市| 二手房| 天水市| 连江县| 呼图壁县| 金塔县| 青州市| 儋州市| 中山市| 卢湾区| 故城县| 丰城市| 桑植县| 孝感市| 秭归县| 石棉县| 辉县市| 呼图壁县| 钦州市| 通化市| 凤阳县| 恩平市| 滕州市| 石景山区| 曲靖市| 察隅县| 江津市| 昌乐县| 海安县| 榆社县| 临泽县| 德格县| 吴江市|