当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 测量命令或秒表返回混乱/不准确的结果

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在尝试提高我从VBS转换的Power Shell登录脚本的性能,并且在我的测试中遇到了问题. 我编写了以下测试,试图找到检索连接到当前机器的所有驱动器的最快方法: ##########################
我正在尝试提高我从VBS转换的Power Shell登录脚本的性能,并且在我的测试中遇到了问题.

我编写了以下测试,试图找到检索连接到当前机器的所有驱动器的最快方法:

################################################################# PSDrive
Measure-Command { Get-PSDrive -PSProvider 'FileSystem' }

$sw = [Diagnostics.Stopwatch]::StartNew()

Get-PSDrive -PSProvider 'FileSystem'

$sw.Stop()
$elapsed =  $sw.Elapsed.TotalMilliseconds
write-host $elapsed
############################################################# END PSDrive

##################################################################### WMI
Measure-Command { Get-WMIObject -query "Select * From Win32_LogicalDisk Where DriveType = 4" }

$sw = [Diagnostics.Stopwatch]::StartNew()

Get-WMIObject -query "Select * From Win32_LogicalDisk Where DriveType = 4"

$sw.Stop()
$elapsed =  $sw.Elapsed.TotalMilliseconds
write-host $elapsed
################################################################# END WMI

如您所见,我使用两种不同的方法来检索驱动器:

GET-PSDrive来

GET-WmiObject可以

我也使用两种不同的技术来测量每个命令的速度:

测量命令

[Diagnostics.Stopwatch] :: StartNew()

然而,根据使用哪种方法测量所花费的时间,两种驱动检索技术中的每一种都被测量得更快.这是上面脚本的一些示例输出(我刚刚提供了相关的详细信息):

Get-PSDrive

Measure Command (TotalMilliseconds) : 0.6983

Stopwatch (TotalMilliseconds) : 408.9745

Get-WMIObject

Measure Command (TotalMilliseconds) : 46.8607

Stopwatch (TotalMilliseconds) : 158.0209

秒表(TotalMilliseconds):158.0209

所以我的问题是,哪一个(如果有的话)更可靠?或者是试图以这种方式测量我的代码完全浪费时间?非常感谢任何帮助.

更新

修改了将每个命令发送到变量的代码(例如$x = Get-PSDrive -PsProvider’FileSystem’),现在输出更有意义:

Get-PSDrive

Measure Command (TotalMilliseconds) : 0.6983

Stopwatch (TotalMilliseconds) : 408.9745

Get-WMIObject

Measure Command (TotalMilliseconds) : 46.8607

Stopwatch (TotalMilliseconds) : 158.0209

Measure-Command将丢弃管道输出,仅测量实际执行命令所需的时间.

秒表计时器正在测量执行命令所需的时间,然后将所有输出显示到控制台.

要获取Measure-Command以测量写入控制台所需的时间,请在您正在测量的脚本块内向Out-Host添加显式管道.然后,您应该看到写入控制台的输出,以及完成的测量时间的相应增加.

网友评论