7

time命令的详细执行流程是怎样的?

我在 PowerShell 中有一个用户创建的函数,它将按以下方式计算执行命令的时间。

  1. 它将打开新的 PowerShell 窗口。
  2. 它将执行命令。
  3. 它将关闭 PowerShell 窗口。
  4. 它将使用GetProcessTimes 函数函数获取不同的执行时间。

Unix中的“时间命令”也是这样计算的吗?

4

3 回答 3

18

Measure-Commandcmdlet 是您的朋友。

PS> Measure-Command -Expression {dir}

您还可以从命令历史记录中获取执行时间(本例中为最后执行的命令):

$h = Get-History -Count 1
$h.EndExecutionTime - $h.StartExecutionTime
于 2013-11-14T11:12:42.693 回答
6

我一直在这样做:

Time {npm --version ; node --version}

使用此功能,您可以将其放入$profile文件中:

function Time([scriptblock]$scriptblock, $name)
{
    <#
        .SYNOPSIS
            Run the given scriptblock, and say how long it took at the end.

        .DESCRIPTION

        .PARAMETER scriptBlock
            A single computer name or an array of computer names. You mayalso provide IP addresses.

        .PARAMETER name
            Use this for long scriptBlocks to avoid quoting the entire script block in the final output line

        .EXAMPLE
            time { ls -recurse}

        .EXAMPLE
            time { ls -recurse} "All the things"
    #>

    if (!$stopWatch)
    {
        $script:stopWatch = new-object System.Diagnostics.StopWatch
    }
    $stopWatch.Reset()
    $stopWatch.Start()
    . $scriptblock
    $stopWatch.Stop()
    if ($name -eq $null) {
        $name = "$scriptblock"
    }
    "Execution time: $($stopWatch.ElapsedMilliseconds) ms for $name"
}

Measure-Command有效,但它吞噬了正在运行的命令的标准输出。(另请参阅在 PowerShell 中计时命令的执行

于 2013-11-14T23:32:32.163 回答
1

如果您需要测量某事所花费的时间,您可以关注此博客条目

基本上,它建议使用 .NET StopWatch 类

$sw = [System.Diagnostics.StopWatch]::startNew()

# The code you measure

$sw.Stop()
Write-Host $sw.Elapsed
于 2013-11-14T11:15:09.550 回答