2011-03-06 6 views
3

확인. 이 qiestion의 제목은 해독하기 쉽지 않지만 설명해 드리겠습니다.코드 내 시간 카운터 및 시간 초과 코드 카운터 실행 차이점

공통된 근거를 설정하기 위해 몇 가지 자세한 정보를 제공 하겠지만이 질문은 가능한 모든 상황, 언어 및 플랫폼에 적용하기위한 것입니다.

플랫폼 : .NET 프레임 워크 4.0 체제 : Windows (명백하게) 언어 : F 번호 나 프로그램을 실행하고 시간을 평가해야

은 몇 가지 지침을 실행하는 데 보냈다. 한 번 카운터를 배치가, 주요 기능을 가지고 생각해

open System.Diagnostics 
let main args = 
    let watch = new Stopwatch() 
    watch.Start() 
    (* Calling functions and executing main body... *) 
    watch.Stop() 
    (* Printing out the evaluated time *) 

OK! 시간이 있고 행복합니다.

이제이 시간을 측정하고 외부에서 평가하고 싶습니다.

$MyProcess = New-Object "System.Diagnostics.Process"; 
$Watch = New-Object "System.Diagnostics.Stopwatch"; 
$MyProcess.StartInfo.FileName = "Myexec"; 
$MyProcess.StartInfo.Arguments = "args"; 
$MyProcess.StartInfo.CreateNoWindow = $true; 
$MyProcess.StartInfo.UseShellExecute = $false; 
$StartingTimer = $Watch.Start(); # Starts the timer 
$StartingProcess = $MyProcess.Start(); 
$WaitingForExit = $MyProcess.WaitForExit(); 
$StoppingTimer = $Watch.Stop(); # Stops the timer 
# Collectiong timings 
$Ticks = $Watch.ElapsedTicks; 
# Returning and printing 
Write-Output "$Ticks"; 

음 : 그래서 너무 시간을 파일을 실행하지만, 계산 PowerShell 스크립트를 고려하십시오. 제 질문은 다음과 같습니다 : 우리가 볼 수 있듯이 우리는 두 가지 다른 유형의 평가를합니다 : 코드 내 및 코드 외. 나는 그 시간이 다르다고 생각한다! 아웃 코드 타이머는 평가할 프로그램과 경쟁하지 않는 일부 명령어를 평가할 것이기 때문에. 예를 들어 컨텍스트 스위치 등 ... CPU가 컨텍스트 스위치를 경험하면 out-code 타이머에서 컨텍스트 슬라이스 동안 다른 프로세스가 완료하는 데 걸리는 시간을 평가합니다 ...

그래? 맞습니까?

답변

5

음, 정말로 정확하지 않습니다.
시간은 약간 다를 수 있지만 차이점은 실제로 프로그램을로드하는 오버 헤드가 될 것입니다.

두 측정, I/O, 사용자 입력을 기다리는, 컨텍스트 스위치를 포함하여, 벽 시계 시간을 측정하는 것 등 당신이 필요로하는 (윈도우 작업 관리자의 CPU 시간 열 같은) 실제 CPU 사용량을 측정 할 경우

TotalProcessorTime 등에 액세스 할 수있는 System.Diagnostics.Process 클래스를 살펴보십시오.

자신 만의 프로세스를 검사하려면 Process.GetCurrentProcess()으로 참조하십시오.

1

PowerShell에서, 당신은 전에 당신이 당신의 명령을 실행 한 후

(get-process -ID $PID).cpu 

을 수행하여 실제 사용 된 CPU 시간을 얻을 수 있습니다.

이는 말하자면 스크립트의 성능을 벤치마킹하기위한 좋은 척도 일 수도 있고 아닐 수도 있습니다. 디스크 I/O 나 디렉토리 검색과 같은 외부 이벤트를 기다리는 데 너무 많은 시간을 소비하는 잘못 작성된 스크립트는 CPU 시간이 거의 사용되지 않았지만 실제로는 완료하는 데 오랜 시간이 걸리고 실제로 외부 리소스에 상당한 오버 헤드를 부과합니다 .