【问题标题】:Using WIndows PowerShell 1.0 or 2.0 to evaluate performance of executable files使用 WIndows PowerShell 1.0 或 2.0 评估可执行文件的性能
【发布时间】:2011-07-09 04:37:19
【问题描述】:

我正在 Windows PowerShell 上编写一个简单的脚本来评估可执行文件的性能。

重要的假设如下:我有一个可执行文件,它可以是用任何可能的语言编写的应用程序(.net 和非.net、Viual-Prolog、C++、C,所有可以编译为.exe文件)。我想分析它获取执行时间。

我这样做了:

Function Time-It {
    Param ([string]$ProgramPath, [string]$Arguments)
    $Watch = New-Object System.Diagnostics.Stopwatch
    $NsecPerTick = (1000 * 1000 * 1000) / [System.Diagnostics.Stopwatch]::Frequency
    Write-Output "Stopwatch created! NSecPerTick = $NsecPerTick"
    $Watch.Start() # Starts the timer
    [System.Diagnostics.Process]::Start($ProgramPath, $Arguments)
    $Watch.Stop() # Stops the timer
    # Collectiong timings
    $Ticks = $Watch.ElapsedTicks
    $NSecs = $Watch.ElapsedTicks * $NsecPerTick
    Write-Output "Program executed: time is: $Nsecs ns ($Ticks ticks)"
}

此功能使用秒表。 嗯,functoin 接受一个程序路径,秒表启动,程序运行,然后秒表停止。问题:System.Diagnostics.Process.Start 是异步的,并且在应用程序完成时不执行下一条指令(手表停止)。创建了一个新进程...

程序结束后我需要停止计时器。

我想到了 Process 类,加厚了它包含一些关于执行时间的信息……不走运……

如何解决?

【问题讨论】:

    标签: performance powershell time


    【解决方案1】:

    您可以使用Process.WaitForExit()

    $proc = new-object "System.Diagnostics.Process"
    $proc.StartInfo.FileName = "notepad.exe"
    $proc.StartInfo.UseShellExecute = $false
    $proc.Start()
    $proc.WaitForExit()
    

    【讨论】:

    • 但它不是静态的...我应该创建一个 Process 对象但不太了解如何设置可执行路径...
    • $proc = new-object "System.Diagnostics.Process" 然后设置属性。您可以遵循 .NET 文档,显然这些类的工作方式相同。
    【解决方案2】:

    这里是kprobst's answer,结合Measure-Command CmdLet,以获得完整的解决方案:

    $proc = new-object "System.Diagnostics.Process"
    $proc.StartInfo.FileName = "notepad.exe"
    $proc.StartInfo.UseShellExecute = $false
    $timeSpan = (MeasureCommand { 
                                    $proc.Start()
                                    $proc.WaitForExit()
                                }
                );
    "Program executed: Time is {0} seconds" -f $timeSpan.TotalSeconds;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多