Windows Command Line Equivalent to “time” in Linux?
本问题已经有最佳答案,请猛点这里访问。
我有一个可能是一个愚蠢的问题,但我似乎无法在网上找到答案。 在基于linux的系统中,在终端中输入"time"之前,任何命令都会根据实际,用户和系统时间给出命令所需的时间。 例如,输入
1 | time ls |
列出当前目录中的文件和文件夹,然后列出列出文件和文件夹所花费的实际,用户和系统时间。 有窗户相当吗? 我试图比较不同算法的性能,但没有Linux机器工作,所以我希望在Windows中有类似的命令。
以下内容远非完美。 但它是我能够最接近模拟UNIX
基本上我正在创建一个接收脚本块的cmdlet,生成一个进程并使用
加载cmdlet后,只需调用它即可
例如:
1 | Measure-Time -Command {Get-Process;sleep -Seconds 5} -Silent |
生成的输出:
1 2 3 | Kernel time : 0.6084039 User time : 0.6864044 Elapsed : 00:00:06.6144000 |
这是cmdlet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class ProcessTime { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool GetProcessTimes(IntPtr handle, out IntPtr creation, out IntPtr exit, out IntPtr kernel, out IntPtr user); } "@ function Measure-Time { [CmdletBinding()] param ([scriptblock] $Command, [switch] $Silent = $false ) begin { $creation = 0 $exit = 0 $kernel = 0 $user = 0 $psi = new-object diagnostics.ProcessStartInfo $psi.CreateNoWindow = $true $psi.RedirectStandardOutput = $true $psi.FileName ="powershell.exe" $psi.Arguments ="-command $Command" $psi.UseShellExecute = $false } process { $proc = [diagnostics.process]::start($psi) $buffer = $proc.StandardOutput.ReadToEnd() if (!$Silent) { Write-Output $buffer } $proc.WaitForExit() } end { $ret = [ProcessTime]::GetProcessTimes($proc.handle, [ref]$creation, [ref]$exit, [ref]$kernel, [ref]$user ) $kernelTime = [long]$kernel/10000000.0 $userTime = [long]$user/10000000.0 $elapsed = [datetime]::FromFileTime($exit) - [datetime]::FromFileTime($creation) Write-Output"Kernel time : $kernelTime" Write-Output"User time : $userTime" Write-Output"Elapsed : $elapsed" } } |
我在SuperUser上发现了一个类似的问题,它涵盖了一些替代方案。 首先是我建议在PowerShell中使用
1 | Measure-Command {ls} |
我的评论中的语法错误。