오디오 메트릭 위젯 (잠재적으로 많은 위젯)을 포함하는 Qt 기반 MacOS/X 오디오 미터링 응용 프로그램에서 작업하고 있습니다. 50ms마다 (즉, 20Hz로) 업데이트되어야합니다.맥 OS/X에서 위젯 QQ 4.6.x : 위젯 업데이트 성능 미스터리
프로그램이 작동하지만 많은 계량기가 동시에 업데이트 될 때 많은 CPU 시간을 소비하고 움츠러들 수 있습니다 (spinny-color-wheel, oh no!).
이상한 점은 : 원래이 앱은 미터 값이 변경 될 때마다 미터 위젯에서 update()를 호출하기 때문에 전체 미터 위젯은 50ms마다 다시 그려집니다. 그러나, 나는 영리하고 실제로 다시 그려야하는 미터의 영역만을 계산할 것이며 위젯의 해당 부분을 다시 그려야한다고 생각했습니다 (예 : update (x, y, w, h), 여기서 y와 h는 미터의 이전 값과 새 값을 기반으로 계산). 그러나 구현했을 때 실제로 초당 픽셀 수가 50 % 감소했지만 CPU 사용률이 4 배 (!) 향상되었습니다.
누구나이 최적화가 실제로 왜 pessimization으로 밝혀 졌는지 설명 할 수 있습니까? 여기, 효과를 보여주는 간단한 예제 응용 프로그램을 게시 한 :
http://www.lcscanada.com/jaf/meter_test.zip
내가 (qmake를, 만들기) 컴파일하면 위의 응용 프로그램을이처럼 실행
$ ./meter.app/Contents/MacOS/meter 72
Meter: Using numMeters=72 (partial updates ENABLED)
.. top은 ~ 50 % CPU를 사용하는 프로세스를 보여줍니다.
나는이처럼 실행하여, 영리한-부분 업데이트 로직을 사용하지
:$ ./meter.app/Contents/MacOS/meter 72 disable_partial_updates
Meter: Using numMeters=72 (partial updates DISABLED)
이 ... 위로 만 ~ 12 %의 CPU를 사용하여 프로세스를 보여줍니다. 응? 이 경우에는 더 적은 CPU가 필요합니까?
나는 상어를 사용하여 응용 프로그램의 프로파일을 만들려고했지만 그 결과는 나에게별로 의미가 없었습니다. FWIW, 저는 8 코어 Xeon Mac Pro에서 Snow Leopard를 사용하고 있습니다.
참으로 ... Linux에서는 부분 업데이트 최적화의 유무에 관계없이 매우 효율적인 업데이트가 제공됩니다. MacOS/X와 Windows 만 좋아 보이지 않습니다. (내 실제 응용 프로그램에서는 텍스트 레이블을 슈퍼 임 포즈하는 데 사용되는 두 개의 직사각형 채우기 및 때로는 하나 또는 두 개의 drawBitmap() 호출 ... 여전히 상당히 사소한 것 같아요.) –