2014-12-20 3 views
0

WPF/C# 데스크톱 응용 프로그램에서 작업 중입니다.CPU 사용률 증가

두 가지 방법이 있습니다 (Tasks으로 전화 걸기). 각 작업은 CPU의 10 %를 차지하고 전체 응용 프로그램도 10 %를 차지합니다. 그래서,

  1. 나는 하나 개의 인스턴스에 모두 작업을 실행, 그것은

  2. 내 응용 프로그램의 두 인스턴스를 실행 (그래서 분명히 느려질 처리, 각 5 %) 및 CPU 사용률을 분할 각 응용 프로그램에서 하나의 작업을 실행하십시오. 괜찮아. 총 사용률은 2 가지 작업에 필요한 20 %입니다.

이제 질문은 : 어떻게 내 응용 프로그램의 한 인스턴스에 CPU 사용률의 20 %를 사용할 수 있습니까?

매우 복잡하여 응용 프로그램의 MCVE을 만들 수 있으므로 코드를 추가 할 수 없습니다.

전체 시나리오 :

그것의 얼굴 인식 응용 프로그램입니다. 30fps의 첫 번째 카메라는 10 % CPU를 사용합니다. 두 번째 카메라가 시작되면 두 fps가 모두 15fps로 낮아지고 총 응용 프로그램 사용률은 여전히 ​​10 %입니다 (fps와 마찬가지로 작업량은 증가하지 않지만 작업 속도는 느려집니다).

응용 프로그램의 인스턴스를 2 개 실행할 때 각각 1 개의 카메라가 실행됩니다. 두 경우 모두 FPS가 30이고 CPU 사용률은 총 20 %입니다. 그것이 전체 시나리오입니다!

+0

fps를 어떻게 제어하는지 이해하는 것이 중요합니다. 폴링이나 이벤트 발사가 있습니까? – dymanoid

+0

새 프레임이 올 때마다 이벤트가 발생하고 이벤트 처리기에서 얼굴 감지 및 인식 방법으로 전달되고 최종 이미지는 'imagebox'에 할당됩니다. – Shaharyar

+0

이벤트를 동 기적으로 처리합니까? 우리에게 약간의 코드를 보여주십시오. – dymanoid

답변

1

우선 CPU 사용량은 비동기 적으로 실행되는 방법에 따라 달라집니다. 외부 자원을 기다리는 작업이있는 경우 (인터넷에서 데이터를 가져 오는 스레드가있는 경우처럼) 또는 I/O 작업이 많은 경우 스레드가 대부분이기 때문에 CPU 사용량이 높지 않을 수 있습니다 계산을하는 대신 데이터가 오기를 기다리십시오. 방대한 계산 작업을 수행 할 때 스레드에서 높은 CPU 사용량을 기대할 수 있습니다. 비동기 적으로 실행되는 코드를 변경하여 CPU 사용량을 늘릴 수 있습니다. 이는 매우 일반적인 설명이지만 코드가 표시되지 않으면 다른 코드를 제공 할 수 없습니다.

은 둘째 - 직접 코드에서 Threads를 사용하는 경우, 다음 Thread 클래스에 Priority 특성이있다, 당신은 그것을 높이기 위해 시도 할 수 있습니다 -하지만 당신은 CPU 사용량이 증가 할 것이라는 보장이 없습니다. 또한 CPU 사용량을 높이기 위해 스레드 우선 순위를 높게 설정하면 같은 시스템에서 실행중인 다른 응용 프로그램이 "굶어 죽을 수 있습니다"(즉 코드로 인해 성능이 저하 될 수 있음) 위험을 감수하고 있음을 기억해야합니다. .

+0

나는 비동기 프로세스를 사용하고 있지 않습니다. 느릴 수 있습니다. 시나리오에 대해 조금 설명했습니다. 이제 문제를 더 쉽게 이해할 수 있기를 바랍니다. – Shaharyar

+0

글쎄, 이제는 편집 한 후에 그게 다른 것 같아. 그러나 우리는 애플리케이션의 카메라 데이터를 어떻게 다룰 지 모릅니다. 두 가지 방법에 대해 말했습니까? 각각의 CPU가 CPU의 10 %를 차지한다는 것을 어떻게 알 수 있습니까? 그것들은 평행하게 일하는 것처럼 들립니다. 두 가지 방법을 어떻게 부릅니까?조각 코드가 없으면 더 이상의 조언을 드릴 수 없습니다. – msporek

+0

최소의 작업 예제를 만들 수 있으면 좋겠다. 나는 이것들이 카메라를 다루고있는 두 개의 '과제'라고 언급했다. 실제로 활용도는 중요하지 않습니다. 그러나이 질문에서 설명한 것은 분석 결과로, 거의 모든 구성 시스템에서 4 ~ 5 가지 구성 시스템 (모든 시스템에서 사용률이 변경되지만 두 프로세스에서 동일하게 유지됨)을 확인했으며 모든 시스템에서 fps가 15로 낮아졌습니다. – Shaharyar