Estoy escribiendo un script simple en Windows PowerShell para evaluar el rendimiento de los archivos ejecutables.Uso de WIndows PowerShell 1.0 o 2.0 para evaluar el rendimiento de los archivos ejecutables
La hipótesis más importante es la siguiente: Tengo un archivo ejecutable, puede ser una aplicación escrita en cualquier idioma posible (.net y no, Viual-Prolog, C++, C, todo lo que se puede compilar como un archivo .exe
) Quiero perfilarlo para obtener tiempos de ejecución.
lo hice:
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)"
}
Esta función utiliza cronómetro. Bueno, el functoin acepta una ruta de programa, se inicia el cronómetro, se ejecuta el programa y luego se detiene el cronómetro. Problema: el System.Diagnostics.Process.Start
es asincrónico y la siguiente instrucción (reloj parado) no se ejecuta cuando la aplicación finaliza. Se crea un nuevo proceso ...
Necesito detener el temporizador una vez que finaliza el programa.
pensé en la clase Process
, thicking se llevó a cabo algo de información respecto a los tiempos de ejecución ... no suerte ...
cómo solucionar esto?
Pero no es estático ... debería crear un objeto de proceso, pero realmente no entiendo cómo configurar la ruta ejecutable ... – Andry
'$ proc = new-object" System.Diagnostics.Process "' y luego simplemente establezca las propiedades. Puedes seguir la documentación de .NET, las clases funcionan igual, obviamente. – kprobst
@Andry - He añadido una muestra. – kprobst