我有一个运行大约60秒的powershell脚本。作为优化的一部分,我想知道脚本的哪一部分需要更多的时间。该脚本有几个功能,如在ADO中重新调用TFS,验证内容,发布等。
即使没有优化的余地,我也想为脚本中的每个任务提供持续时间的证据。我做了研究,找到了使用测量cmd,秒表的选项,但我不确定如何在功能中使用它。谢谢你的建议。
正如Daniel好心指出的那样,我维护了一个名为PSProfiler的模块,旨在从任意脚本或scriptblock中收集逐行执行时间测量:
# Install PSProfiler
Install-Module PSProfiler -Scope CurrentUser
# Import PSProfiler
Import-Module PSProfiler
# Profile sample script
Measure-Script -Name "Arunkumar's script " {
Start-Sleep 1
Start-Sleep 2
}
您将得到如下输出:
Anonymous ScriptBlock:
Arunkumar's script
Count Line Time Taken Statement
----- ---- ---------- ---------
0 1 00:00.0000000 {
1 2 00:01.0116913 Start-Sleep 1
1 3 00:02.0037062 Start-Sleep 2
0 4 00:00.0000000 }
示例脚本显然不是那么有趣,但正如您所看到的,它为您提供了每一行:
- A
Count
-从特定行开始的语句执行的次数 - 测量的总执行时间。
这对于确定您可能想要优化的确切行/语句非常有用:-)
值得注意的是,PSProfiler通过检测源代码来工作,因此只测量语句在脚本中编写时所花费的时间。
如果你想要更细粒度的深度剖析遥测,请查看Profiler by nohwnd