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