2008-11-04 3 views
4

런타임 중에 어떻게 CPU 사용률을 제어하는 ​​것이 좋습니까?CPU 사용률 제어

CPU로드를 폴링하고 삽입 하시겠습니까?

답변

4

OS 기능을 권장합니다. Windows에는이를위한 성능 카운터와 WinAPI 기능이 있습니다.

foreach (Process proc in Process.GetProcesses()) { 
    using (PerformanceCounter pcProcess = new PerformanceCounter("Process", "% Processor Time", proc.ProcessName)) { 
     pcProcess.NextValue(); 
     System.Threading.Thread.Sleep(1000); 
     Console.WriteLine("Process:{0} CPU% {1}", proc.ProcessName, pcProcess.NextValue()); 
    } 
} 

이 코드는 CodeProject에서 WMI와 같은 수 :

public string GetCPU() 
{ 
    decimal PercentProcessorTime=0; 
    mObject_CPU.Get(); 

    ulong u_newCPU = 
     (ulong)mObject_CPU.Properties["PercentProcessorTime"].Value; 
    ulong u_newNano = 
     (ulong)mObject_CPU.Properties["TimeStamp_Sys100NS"].Value; 
    decimal d_newCPU = Convert.ToDecimal(u_newCPU); 
    decimal d_newNano = Convert.ToDecimal(u_newNano); 
    decimal d_oldCPU = Convert.ToDecimal(u_oldCPU); 
    decimal d_oldNano = Convert.ToDecimal(u_oldNano); 

    // Thanks to MSDN for giving me this formula ! 

    PercentProcessorTime = 
     (1 - ((d_newCPU-d_oldCPU)/(d_newNano - d_oldNano)))*100m; 

    // Save the values for the next run 

    u_oldCPU   = u_newCPU; 
    u_oldNano   = u_newNano; 

    return PercentProcessorTime.ToString("N",nfi);; 
} 

그래서 당신은 (이 OS 제공 업체를 조회 할 수 있습니다 여기에

BCL Team Blog에서 성능 카운터를 사용하는 예입니다 또는 귀하의 운영 체제에 대한 다른) 프로세서 사용률이 높은 경우 스레드를 잠. 고전적인 이벤트 기반 모델을 - - 또는 주기적으로 짧은 시간 동안 잠을 입력 기다려야 하나에

+0

감사합니다. 내가 토론하고 싶었던 것은 "CPU로드를 폴링하고 삽입하는"것이 유일한/최선의 선택 일 뿐이므로 그렇게하는 것이 아니 었습니다. – gil

0

가장 쉬운 방법은 메인 루프를 수정하는 것입니다.

응용 프로그램을 잠자기 상태로 설정하면 10-100ms 범위 내의 매우 짧은 시간 제한을 사용하고 일부 사용자 입력은 지연되고 더 적은 OS 수준 오버 헤드가 전환 될 것입니다 신청.

관련 문제