天天看點

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

注:本篇文章,未在聯系作者以及得到許可的情況下, 禁止以任何形式進行轉載。

By:Anders      Mail:[email protected]       

發表此文的原因是由于本人在閱讀ghjcona兄寫的PowerShell筆記中,其中有一篇談到Native Windows Command的話題所引發的。

話題如下:

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

這比使用WMI的Win32_PingStatus簡潔多了,當然你要是問為什麼不使用直接使用Ping(還有比如dir,del,findstr 等Windows Native Command)呢? 

首先我們來看看什麼叫做Native Windows Command,引用由我的朋友 Edengundam 大哥所寫的一段話(具體也可以去MS的KB裡搜尋相關内容),内容如下:

Native Windows Command

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

我不知道應該這個東西用什麼名字. 這類指令在Windows世界大量存在, 譬如: dir, findstr, del, ping. 這些指令就是Windows之前的可執行檔案(非.Net指令行可執行檔案). 在PowerShell中調用這些指令效率是最低的, 因為執行他們PowerShell需要建立一個新程序. 此外因為這些指令早于PowerShell, 是以他們的資訊輸出都是基于文本的(也可以說是字元串), 是以喪失了PowerShell對對象的處理能力. 是以, 如果你知道PowerShell的實作, 就避免使用這些指令. 

(補:關于Native Windows Command到底該翻譯成什麼意思,我與Edengundam的讨論覺得應翻譯為“Windows内置(本地)指令”,最後我在MS官方直譯文章中看到MS将Native Windows Command翻譯為“Windows原生指令”)

本着科學探索的原則^_^ 我們來測試下Native Windows Command是不是真的比Native PowerShell Command執行效率低呢?

我們先建立兩個互動式腳本(嚴格的講并非是腳本,我在這姑且用腳本一詞)檔案。

兩個腳本檔案名為:dos_ping.ps1  和 ps_ping.ps1

dos_ping.ps1 内容如下:(也就是我們之前說的Native Windows Command)

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

ping  127.0 . 0.1

ps_ping.ps1 内容如下:(PowerShell的調用對象)

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

$ping  =  New - Object System.Net.NetworkInformation.Ping

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

$ping.send( " 127.0.0.1 " )

接下來我們建立一個主測試PowerShell腳本檔案:start_ping.ps1

start_ping.ps1内容如下:

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Write - Host  " ============================== "

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ ps_ping.ps1} | findstr  " TotalSeconds "  | Format - list 

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ dos_ping.ps1} | findstr  " TotalSeconds "  | Format - list 

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Write - Host  " ============================== "

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ ps_ping.ps1} | findstr  " TotalSeconds "  | Format - list

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ dos_ping.ps1} | findstr  " TotalSeconds "  | Format - list

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Write - Host  " ============================== "

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ ps_ping.ps1} | findstr  " TotalSeconds "  | Format - list

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Measure - Command {C:/ dos_ping.ps1} | findstr  " TotalSeconds "  | Format - list

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Write - Host  " ============================== "

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高
淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

Stop - Process  - name notepad

補:Measure-Command是一個度量指令,它的作用是擷取指令所執行的時間。為了便于觀察,在這裡還我用了findstr性質提取"TotalSeconds" 總的使用時間。

好了,三個必備檔案都準備好了,接下來我們執行start_ping.ps1看看結果如何:

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

經過三次測試比較,在PowerShell中使用Native Windows Command所花費的總時間遠遠高于Native PowerShell Command。

那為什麼Native Windows Command的所用時間那麼高呢, 因為執行他們PowerShell需要建立一個新程序。而PowerShell Command則不需要。 (如下圖:在執行單純的Native Windows Command時在任務管理器中啟動了ping.exe程序)

淺談---測試Native Windows Command與Native PowerShell Command哪個效率高

是以也就證明了,在PowerShell中調用Native Windows Command的效率遠低于Native PowerShell Command。

這裡隻是對于Native Command執行效率的一個小小的資料測試說明,有不到之處還望指出。