Использование WIndows PowerShell 1.0 или 2.0 для оценки производительности исполняемых файлов

Я пишу простой скрипт на Windows PowerShell, чтобы оценить производительность исполняемых файлов.

Важная гипотеза заключается в следующем : У меня есть исполняемый файл, это может быть приложение, написанное на любом возможном языке (.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)"
}

Эта функция использует секундомер. 0 для оценки производительности исполняемых файлов Я пишу простой скрипт на Windows PowerShell для оценки производительности исполняемых файлов. Важная гипотезаi следующая: у меня есть исполняемый файл, это может быть ...

Я пишу простой скрипт на Windows PowerShell, чтобы оценить производительность исполняемых файлов.

Важная гипотеза заключается в следующем : У меня есть исполняемый файл, это может быть приложение, написанное на любом возможном языке (.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)"
}

Эта функция использует секундомер. 0 для оценки производительности исполняемых файлов Я пишу простой скрипт на Windows PowerShell для оценки производительности исполняемых файлов. Важная гипотезаi следующая: у меня есть исполняемый файл, это может быть ...

Я пишу простой скрипт на Windows PowerShell, чтобы оценить производительность исполняемых файлов.

Важная гипотеза заключается в следующем : У меня есть исполняемый файл, это может быть приложение, написанное на любом возможном языке (.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)"
}

Эта функция использует секундомер. Важная гипотеза: у меня есть исполняемый файл, это может быть ...

Я пишу простой скрипт на Windows PowerShell, чтобы оценить производительность исполняемых файлов.

Важная гипотеза заключается в следующем. : У меня есть исполняемый файл, это может быть приложение, написанное на любом возможном языке (.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)"
}

Эта функция использует секундомер. Важная гипотезаi следующая: у меня есть исполняемый файл, это может быть ...

Я пишу простой скрипт на Windows PowerShell, чтобы оценить производительность исполняемых файлов.

Важная гипотеза заключается в следующем : У меня есть исполняемый файл, это может быть приложение, написанное на любом возможном языке (.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)"
}

Эта функция использует секундомер. 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)"
}

Эта функция использует секундомер. 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)"
}

Эта функция использует секундомер. Итак, функция принимает путь к программе, секундомер запускается, программа запускается и секундомер останавливается. Проблема: System.Diagnostics.Process.Start является асинхронным, и следующая инструкция (часы остановлены) не выполняется после завершения приложения. Создается новый процесс ...

Мне нужно остановить таймер, когда программа закончится.

Я подумал о классе Process , утолщая в нем некоторую информацию о времени выполнения ... не повезло ...

Как решить эту проблему?

5
задан Andry 4 March 2011 в 23:20
поделиться