使用 PowerShell 測量指令碼的執行時間

Marion Paul Kenneth Mendoza 2022年5月16日
使用 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-CommandExpression 引數。

示例程式碼:

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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相關文章 - PowerShell Command