使用 PowerShell 測量指令碼的執行時間
預計在建立指令碼後檢查指令碼的執行時間。如果有任何修訂會使指令碼變慢或變快,它可以幫助開發人員用可測量的值來衡量指令碼。
在 Windows PowerShell 中,有一種方法來衡量這一點,在本文中,我們將學習如何準確地做到這一點。
在 PowerShell 中使用 Measure-Command
Cmdlet 測量指令碼的執行時間
在 PowerShell 中使用 Measure-Command
cmdlet 可以輕鬆測量執行時間或執行時間。此命令還可以告訴你執行自定義函式或整個指令碼需要多長時間。
Measure-Command
是一個易於使用並提供直觀、可操作的輸出的 cmdlet。
Measure-Command
cmdlet 需要兩個引數:-Expression
和 -InputObject
。-InputObject
引數以任何方式表示一個或多個表示式。
它很簡單,但提供了有價值的指標,讓你瞭解程式碼的效能。
讓我們在效能調整示例中使用 Measure-Command
。假設我們有一個定義為 $arr01 = @()
的陣列。
我們將使用帶範圍建立的整數來保持簡單。我們將使用 +=
將這些數字新增到陣列中。
$arr01 = @()
0..10000 | ForEach-Object { $arr01 += $_ }
上面的程式碼片段執行了,但是執行了多長時間?讓我們用 Measure-Command
找出答案。
首先,我們可以將程式碼包裝在表示表示式的指令碼塊中,並將其用作 Measure-Command
的 Expression
引數。
示例程式碼:
Measure-Command -Expression { 0..10000 | ForEach-Object { $arr01 += $_ }}
輸出:
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 76
Ticks : 762558
TotalDays : 8.82590277777778E-07
TotalHours : 2.11821666666667E-05
TotalMinutes : 0.00127093
TotalSeconds : 0.0762558
TotalMilliseconds : 76.2558
請注意,Measure-Command
返回的時間被分解為不同的類別。我們不需要執行任何數學運算來轉換秒、分鐘或小時。
這都是返回的物件 Measure-Command
的一部分。
如果我們需要引用總秒數,我們將引用 TotalSeconds
屬性。我們可以將 Measure-Command
的輸出分配給一個變數並引用所有屬性。
$slow_performance = Measure-Command -Expression { 0..10000 | ForEach-Object { $arr01 += $_ }}
現在讓我們使用 ArrayList
來使用更快的方式將元素新增到陣列中,看看它有多快。
示例程式碼:
$arr01 = [System.Collections.ArrayList]@()
$fast_performance = Measure-Command -Expression { 0..10000 | ForEach-Object { $arr01 += $_ }}
$fast_performance
輸出:
Days : 0
Hours : 0
Minutes : 0
Seconds : 7
Milliseconds : 346
Ticks : 73465163
TotalDays : 8.50291238425926E-05
TotalHours : 0.00204069897222222
TotalMinutes : 0.122441938333333
TotalSeconds : 7.3465163
TotalMilliseconds : 7346.5163
我們還可以使用 Measure-Command
檢查 PowerShell 檔案 (.ps1
) 的執行時。
示例程式碼:
Measure-Command { .\checkdrives.ps1 | Out-Default }
輸出:
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 30
Ticks : 308166
TotalDays : 3.56673611111111E-07
TotalHours : 8.56016666666667E-06
TotalMinutes : 0.00051361
TotalSeconds : 0.0308166
TotalMilliseconds : 30.8166
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn