使用 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