2011-03-04 2 views
5

실행 파일의 성능을 평가하기 위해 Windows PowerShell에서 간단한 스크립트를 작성하고 있습니다.Windows PowerShell 1.0 또는 2.0을 사용하여 실행 파일의 성능 평가

중요한 가설은 다음과 같습니다. 실행 가능한 파일을 가지고 있습니다. 가능한 언어 (.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은 비동기식이며 응용 프로그램이 끝나면 다음 명령 (watch stopped)이 실행되지 않습니다. 새로운 프로세스가 생성됩니다 ...

일단 프로그램이 종료되면 타이머를 중지해야합니다.

나는

방법이 문제를 해결하기 위해 ... 그것은 운이 실행 시간을 ...에 관한 몇 가지 정보를 보유 thicking의 Process 클래스에 대한 생각?

답변

6

당신은 여기 Process.WaitForExit()

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

을하지만 정적 아니지만 ... 내가 프로세스 객체를 생성해야하지만, 실행 경로를 설정하는 방법을 정말로 모르겠다 ... – Andry

+0

'$ proc = new-object "System.Diagnostics.Process"'그런 다음 속성을 설정하기 만하면된다. 당신은 .NET 문서를 따라갈 수 있으며, 클래스는 동일하게 작동합니다. – kprobst

+0

@Andry - 샘플을 추가했습니다. – kprobst

2

이 완벽한 솔루션를 들어, Measure-Command cmdlet을 결합 kprobst's answer,이다 사용할 수 있습니다

$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; 
관련 문제