国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
家居| 桓仁| 常宁市| 泗阳县| 闽侯县| 平邑县| 松阳县| 东乡族自治县| 江川县| 易门县| 且末县| 石阡县| 腾冲县| 闸北区| 尼木县| 镇安县| 富阳市| 泽库县| 毕节市| 古蔺县| 鹰潭市| 长治县| 巧家县| 敖汉旗| 吉林省| 兰州市| 简阳市| 曲阳县| 德惠市| 健康| 南皮县| 富民县| 黑山县| 娱乐| 阿坝县| 招远市| 道真| 抚远县| 武义县| 宜宾市| 奉节县|