큰 응용 프로그램에서 작업 중이며 CPU가 두 시점 사이에로드 된 상태를 파악하려고합니다. 나는 내 자신의 과정에 관심이있는 것이 아니라 모든 과정에 관심이있다.Windows에서 유휴 프로세스의 총 CPU 시간은 작업 관리자와 비슷합니다.
제 아이디어는 두 기간 사이의 유휴 프로세스의 총 CPU 시간을 얻는 것입니다. 그런 다음 그 값을 실시간 차이와 비교하십시오. 그런 다음 유휴 프로세스에 소요 된 평균 CPU 시간 (% CPU 시간)을 계산할 수 있으므로 실제 프로세스에 소요 된 CPU의 평균 %를 계산할 수 있습니다. 예를 들어
:
- 실시간 샘플 : 2012년 7월 30일 13 : 56 : 1 2012년 7월 30일 13시 56분 21초
- 유휴 프로세스 전체 CPU 시간 샘플 : 56 : 실시간으로 23시 10분 및 56:23:15는
- 차이 : 20
- 유휴 프로세스 전체 CPU 시간의 차이 : 5 초 유휴 프로세스에서
- 평균 %의 CPU 시간 : 25 %
- 평균 %의 CPU 시간 ...에서 실제 프로세스 : 75 %
가능한 한 성능에 미치는 영향을 최소화하기 위해 두 개의 샘플 만 가져오고 싶습니다. 하나는 처음에, 하나는 끝에 있습니다.
또한 전체 프로세스의 CPU로드를 계산하기 위해 다른 프로세스를보고 싶지는 않지만 유휴 프로세스 만보고 싶습니다. (예를 들어 다른 프로세스의 총 CPU 시간 합계를 계산하고 싶지 않습니다.)
나는 Kernel32.dll OpenProcess을 사용하려고했습니다. 그러나 apperantly 당신은 유휴 프로세스에 액세스 할 수 없습니다. ERROR_ACCESS_DENIED 예외가 발생합니다.
작업 관리자가 유휴 프로세스의 총 CPU 시간을 표시하므로이 작업이 가능해야합니다.
참고 : 프로세스의 CPU 시간 (%)에 관심이 없습니다. 나중에 평균을 계산하기 위해 총 CPU 시간 만.
using System.Diagnostics; – Casperah
위대한 트릭을 했어 :-) –