加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

使用WIndows PowerShell 1.0或2.0来评估可执行文件的性能

发布时间:2020-12-14 02:02:49 所属栏目:Windows 来源:网络整理
导读:我正在 Windows PowerShell上编写一个简单的脚本,以评估可执行文件的性能. 重要的假设如下:我有一个可执行文件,它可以是用任何可能的语言编写的应用程序(.net而不是,Viual-Prolog,C,可以编译为.exe文件的所有内容).我想描述一下执行时间. 我这样做了: Func
我正在 Windows PowerShell上编写一个简单的脚本,以评估可执行文件的性能.

重要的假设如下:我有一个可执行文件,它可以是用任何可能的语言编写的应用程序(.net而不是,Viual-Prolog,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是异步的,当应用程序完成时,不执行下一条指令(watch stopped).创建了一个新流程……

一旦程序结束,我需要停止计时器.

我考虑过Process类,加厚它有关于执行时间的一些信息……不幸运……

怎么解决这个?

解决方法

你可以使用Process.WaitForExit()

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读