亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

PowerShell腳本性能優化技巧總結

2020-03-26 19:24:40
字體:
來源:轉載
供稿:網友

最終優化

在你寫腳本時,不要老是想著去優化,因為你的部分優化代碼可能最終被丟棄。而且老是想著優化也會降低你的生產效率,因為和CPU的時間相比,腳本編寫者的時間可能會更寶貴。

使用過濾參數

PowerShell可能會消耗很多資源,因為許多Cmdlet本身的設計就是用來提供數目很大的數據。所以,如果你使用的Cmdlet命令支持-Filter, -Include, 和 -Exclude這樣的過濾條件,就盡量使用它們。

首先如果一條命令支持-Filter 過濾器參數,那就說明這里可能隱藏著一個對象訪問API。使用過濾,可能會讓代碼執行得非??欤驗橥ǔ趯ο蟊粍摻ㄖ熬蛨绦羞^濾。相反一條命令支持-Include, 和 -Exclude,這樣的過濾會發生在對象被創建后,對象進入管道之前。所以后者的效率比-Filter 要低。盡管如此,使用-Include, 和 -Exclude后,讓部分對象不進入管道,速度也是非??斓摹?/p>

有時,應當使用更多的類型去過濾。比如你想搜索D盤下所有的后綴名為htm的文件。我們應當會使用*.htm作為過濾-Filter條件,PowerShell使用傳統的文件系統通配符,僅會返回所有匹配到的文件對象。這樣效率很高,因為這種簡單模式匹配,Windows API本身在底層就實現了。然而Windows API本身也有許多限制,因為它太老了,它會忽略文件后綴名中除了htm這三個字符以外的所有字符。所以即使有Html這樣后綴名它也會返回。所以此時,我們需要-filter和-include雙劍合璧,打敗金輪法王。

復制代碼 代碼如下:
dir D: -Filter '*.htm' -Include '*.html' -Recurse

但是有一點要記住,使用-Filter過濾條件是很快,但是到底快到什么程度取決于-Filter調用的底層API。我們來舉個例子吧:
復制代碼 代碼如下:
Get-WmiObject -Class Win32_Product  -Filter 'Vendor LIKE "%Microsoft%"'

這個例子會查詢機器安裝的所有微軟的產品,縱然我們使用了-filter,仍舊很慢?因為-Filter調用的是Windows Management Instrumentation (WMI)API,這個是基于WMI查詢語言(WQL)的,過濾是發生在WMI內部的。

 

減少資源的占用

性能的優化包括降低時間復雜度和空間復雜度,但是很多時候,魚和熊掌不可兼得。你只能選擇其一。舉個例子吧:比如你想列出D盤下所有的文件,然后針對每個文件做點事情,你可能會使用ForEach-object來變量整個集合中的文件系統對象:

復制代碼 代碼如下:
Get-ChildItem -Path D:/ -Recurse | ForEach-Object { do-something }

使用了這個命令后,每一個文件對象經過額外的包裝后,會經過管道的邊界,代碼的執行效率顯著下降,但是它不會占用太多內存,因為每次只有一個對象在管道中流通。

 

另外一種方法,你可能會使用Foreach循環:

 

復制代碼 代碼如下:
foreach($file in (Get-ChildItem -Path D:/ -Recurse)){
 do-something }

這段代碼執行起來非???,因為它避免了管道邊界。但是它在處理之前會把所有文件對象加入到集合中。所以如果這個集合非常龐大,它可能會像某國的某能源局領導占用上億人民幣一樣,洪水禽獸般占用系統資源。

 

Foreach循環比ForEach-Object,執行速度快,消耗的內存多。但是如果你能確定你要處理的數據規模不是很大,Foreach循環當然是上上之選。

使用Sleep降低CPU的使用率

接觸很多對象的PowerShell腳本,通常會執行很長時間,對于處理器也不會憐香惜玉。現在單核CPU已成往事,在多核的今天這可能不是個事,但這仍舊可能會導致系統花費了大量時間去等待。如果你的腳本消耗了很多CPU周期,或者需要等待事情發生,你可以使用Start-Sleep這條命令來降低處理器的使用率。默認Slee是按秒來等待的,這肯定受不了,你可以設置一個毫秒級別的暫停。始終的分辨率不超過10到20毫秒會更好(再小就沒有意義了),所以你可以指定最小暫停時間為20毫秒。

另外你可能不想讓你的腳本每個循環周期中都Sleep,只讓部分周期Sleep,以給CPU騰出時間去做其它事。下面的腳本會借助操作符%取模來保證每10輪暫停一次:

復制代碼 代碼如下:
$i=0
Get-ChildItem -Recurse |
 ForEach-Object{    $i+=1
    if($i%10 –eq 0)
   {sleep -mill 20}
   do-something
}

 

簡單的優化方案

你可以把這些小技巧歸納成一個統一的優化方案。首先,別急著優化直到腳本寫完了。接著,使用Filter過濾來減少限制返回對象的數目,然后再用-include和,-exclude進行微調,這樣做既會減少運行時間,也會降低資源的使用率?;谶@一點,如果你的數據量比較大,就使用Foreach循環來代替Foreach-Object,這樣會讓你的腳本執行效率提高。當然如果你的數據規模到了10萬級以上,這可能會引入新的性能問題。最后,如果你發現自己的腳本CPU占用率老高老高,看看能否在一些循環中使用Start-Sleep命令,來放松一下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美裸身视频免费观看| 久久久中文字幕| 菠萝蜜影院一区二区免费| 国产精品狼人色视频一区| 精品福利樱桃av导航| 亚洲japanese制服美女| 亚洲影院污污.| 亚洲女人被黑人巨大进入al| 中文字幕亚洲综合久久筱田步美| 亚洲新中文字幕| 中文字幕在线观看日韩| 国外成人性视频| 中文字幕av一区| 亚洲91精品在线| 欧美性受xxxx白人性爽| 国内精品久久久久久久久| 亚洲福利在线播放| 亚洲a成v人在线观看| 久久精品久久精品亚洲人| 久久国产精品首页| 亚洲片在线资源| 日韩在线视频免费观看高清中文| 国产欧美中文字幕| 国产91久久婷婷一区二区| 亚洲白拍色综合图区| 日韩美女写真福利在线观看| 一区二区欧美激情| 2019中文字幕全在线观看| 亚洲午夜激情免费视频| 欧美高清不卡在线| 欧美国产日韩二区| 亚洲自拍小视频免费观看| 米奇精品一区二区三区在线观看| 中日韩美女免费视频网站在线观看| 亚洲国产精品网站| 久久久精品日本| 日韩大陆欧美高清视频区| 国产日韩欧美在线看| 国产欧美一区二区三区四区| 高潮白浆女日韩av免费看| 亚洲国产一区二区三区在线观看| 亚洲综合在线中文字幕| 精品无人区乱码1区2区3区在线| 国产91露脸中文字幕在线| 欧美在线xxx| 色婷婷av一区二区三区在线观看| 国产成人精品在线播放| 日本高清视频一区| 国产精品麻豆va在线播放| 亚洲色在线视频| 91精品久久久久久| 日韩视频免费在线观看| 欧美成人激情在线| 中文字幕亚洲专区| 国产精品视频色| 欧美成年人网站| 日韩av综合网站| 日韩av手机在线| 日韩电影免费在线观看| 久久久久久亚洲精品| 91精品国产综合久久香蕉| 中文字幕久热精品在线视频| 日韩欧美亚洲范冰冰与中字| 黑人精品xxx一区| 亚洲一区二区三区成人在线视频精品| 久久久久久久久久久亚洲| 亚洲成色999久久网站| 日韩精品极品毛片系列视频| 午夜精品三级视频福利| 久久免费精品视频| 97在线免费观看视频| 日韩欧美中文第一页| 日韩免费观看视频| 亚洲成色777777女色窝| 日韩视频免费大全中文字幕| 亚洲欧美日韩高清| 欧美激情欧美激情在线五月| 91国内精品久久| 亚洲图片在线综合| 亚洲精品理论电影| 国产成人精品日本亚洲| 日韩欧美大尺度| 亚洲男人天堂视频| 在线精品播放av| 日韩在线高清视频| 成人激情综合网| 91精品久久久久久久久久久| 日韩av成人在线观看| 亚洲黄色www网站| 久久综合电影一区| 久久亚洲一区二区三区四区五区高| 中文字幕在线亚洲| 欧美肥臀大乳一区二区免费视频| 国产精品女主播视频| 少妇av一区二区三区| 操91在线视频| 亚洲精品久久久久久久久久久久| 国产精品嫩草视频| 日韩精品www| 久久久亚洲影院| 精品自拍视频在线观看| 中文字幕av一区中文字幕天堂| 国产精品爽黄69| 久久久久中文字幕2018| 91国产视频在线| 日韩久久精品成人| 欧美裸身视频免费观看| 亚洲美女喷白浆| 国产精品一区二区三区在线播放| 亚洲自拍偷拍色片视频| 92福利视频午夜1000合集在线观看| 欧美精品激情blacked18| 成人免费视频xnxx.com| 国产精品自拍偷拍| 精品久久久久久中文字幕大豆网| 成人精品aaaa网站| 亚洲福利视频网站| 高清欧美性猛交xxxx| 热re91久久精品国99热蜜臀| 中文字幕国产亚洲| 精品免费在线视频| 欧美一级在线亚洲天堂| 91在线精品播放| 日本精品免费一区二区三区| 国产精品91久久久久久| 亚洲激情 国产| 日韩大片免费观看视频播放| 精品福利在线看| 久久免费少妇高潮久久精品99| 亚洲香蕉伊综合在人在线视看| 亚洲欧洲xxxx| 亚洲成年人在线播放| 亚洲999一在线观看www| 91日本视频在线| 亚洲偷欧美偷国内偷| 色天天综合狠狠色| 疯狂做受xxxx欧美肥白少妇| 亚洲精品国产精品自产a区红杏吧| 欧美一区二区三区图| 亚洲乱码一区av黑人高潮| 91精品成人久久| 中文字幕久热精品在线视频| 久久91亚洲人成电影网站| 中文字幕精品av| 国产精品视频不卡| 欧美日韩国产色视频| 性金发美女69hd大尺寸| 欧美精品一区二区免费| 91国偷自产一区二区三区的观看方式| 日韩中文字幕网站| 久久99青青精品免费观看| 亚洲高清久久久久久| 日韩免费看的电影电视剧大全| 777777777亚洲妇女| 日本精品一区二区三区在线| 美女啪啪无遮挡免费久久网站| 久久久噜噜噜久久中文字免| 欧美人在线视频| 国产91成人在在线播放| 欧美高清自拍一区| 日韩欧美国产视频| 欧美色道久久88综合亚洲精品| 高清在线视频日韩欧美| 国产成人精品免费视频|