2012-12-13 3 views
2

저는 장치 카메라에서 프레임을 가져 와서 CPU 사용량이 많은 이미지 처리를 수행하는 iOS 응용 프로그램이 있습니다. iPad 2, iPad 3 및 iPhone 4의 경우 응용 프로그램이 행복하게 초당 30 프레임 (fps)으로 실행됩니다. 나는 최근에 iPhone 5에서 테스트했으며 대부분 30fps로 실행됩니다. 가끔은 15fps 정도 떨어지는 것으로 나타났습니다. 다른 기기 (하드웨어가 느린 기기)에서 결코 경험하지 못했던 것입니다. 나는이 문제를 추적하기 위해 열심히 노력했고, 나는 많은 것들을 배웠지 만 설명을 찾지 못했다. 여기에 무슨 일이 일어나고 있는지에 대한 단서 줄 수있는 나의 관찰 중 일부입니다 : 그것은 단지 아이폰에서 발생설명되지 않은 프레임 속도가 iPhone 5에서만 떨어집니다.

  • 5
  • 전화
  • 응용 프로그램에서 응용 프로그램을 프로파일 링 할 때 나는 문제를 다시 기운 다 여러 스레드에서 실행 중일 때, 프레임을 잡아서 이미지를 필요한 형식으로 변환하여 집중적 인 이미지 처리에 대한 별도의 스레드에서 실행합니다. 프레임 잡는 쓰레드는 결코 떨어지지 않는 30fps 이하로 떨어집니다. 즉, 내 문제는 카메라 프레임 속도가 낮은 이유로 인해 발생하는 것이 아닙니다.
  • 저는 iPhone 대기 버튼을 누르고 홈 버튼을 누르고 응용 프로그램으로 돌아가서 응용 프로그램을 시작하여 문제를 재현 할 수 있습니다. 이 문제를 3-6 번 반복하면 문제가 자주 발생합니다 (항상 그런 것은 아닙니다).
  • iOS 6.0과 관련이없는 것 같습니다. iOS 6을 사용하는 4s에서 제대로 작동합니다.
  • 문제가 발생하면 앱을 종료하고 자주 다시 시작해도 프레임 속도가 다시 복원되지 않습니다 아이폰과 관련된 내 애플 리케이션의 문제를 제안 5).
  • 휴대 전화를 내 컴퓨터에 연결하고 앱을 재구성하면 항상 프레임 속도 문제가 해결되는 것 같습니다.

이것은 매우 이상합니다. iPhone 5가 배터리 수명을 돕기 위해 시계의 속도를 때때로 감소시킬 수 있습니까 (iPads 및 iPhone 4는 그렇지 않음)?

나는 비슷한 경험을 가진 사람의 이야기를 듣고 싶습니다.

내 응용 프로그램이 iPhone 5에서 더 나빠 보이지 않아야합니다. 사전에

많은 감사,

케빈

업데이트

좀 더 테스트를 완료했지만 여전히 문제를 발견하지 않았습니다. 이것이 내가 시도한 것이다.

  • 나는 스레딩
  • 은 내가
  • 모든 로그인
  • 악기에 다시 시도 실패 제거 사용 된 일부 타사을 제거했습니다 제거했습니다. 기기에서 문제가 발생하지 않습니다.

아이디어가 부족합니다. iPhone 5에서 프레임 속도가 느려지는 사람이라면 누구 에게라도 듣고 싶습니까? iPhone 5의 절전 모드가 있습니까?

답변

2

가장 큰 원인은 코드에서 iPhone 5의 특정 타이밍에 의해서만 트립되는 경쟁 조건입니다. 나는 어디에서나 당신이 리소스 경합이 있는지 살펴보고 올바르게 처리하고 있는지 확인합니다. 특히 시간 초과를 수행하는 모든 곳에서 (데드락 또는 충돌이 완전히 없기 때문에).

여러 스레드에서 실행 중이라고 언급했습니다. NSThread, performSelectorInBackground:, NSOperation 또는 GCD를 사용하고 계십니까? NSThread을 직접 사용하면 스레드와 리소스 문제의 일반적인 원인이됩니다. NSOperation 또는 GCD를 사용하는 것보다 올바르게 수행하기가 더 어렵 기 때문입니다.

performSelectorInBackground:으로 전화를 걸면이 코드는 매우 쉽게 사용하기 쉽고 (거의 사용하지 않아야 함) 매우 의심 스럽습니다. 사실 앱을 떠나서 다시 실행하면 문제가 발생하기 쉽기 때문에 뷰 컨트롤러에서 스레드를 수동으로 생성하는 것으로 의심됩니다 (일반적인 실수입니다). performSelectorInBackground:의 문제는 이 이미에 대한 스레드를 생성했음을 쉽게 알 수 없다는 것입니다. 그래서 당신은 당신이 의미했던 것보다 더 많은 실을 감을 수 있습니다.

모든 공연 내용에서와 같이 악기로 시작해야합니다. 특히 프로파일 러 및 스레딩 도구를 살펴보십시오.

이런 종류의 문제의 다소 일반적인 원인 : NSLog을 감사하십시오. 매우 느리고 동기입니다. 여러 스레드에서 실행하면 성능에 큰 영향을 줄 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 멀티 쓰레딩을 보면서 약간의 시간을 보냈으며 잠재적으로 그 문제의 원인에 동의한다. 그러나 나는 아직 확인할 수 없었다. 나는 performSelectorInBackground를 호출하지 않았고, 쓰레드는 C++ 코드에 사용하고 부스트 쓰레드를 사용합니다. 나는 대부분의 스레딩을 제거하려고 시도했지만 아이폰 5의 속도는 여전히 느려지고 있습니다. NSLog는 거의 사용하지 않습니다. – user1230569

+0

악기에서 문제를 재현하지 못했습니다. 이것이 제가 전화로 절전을 의심하는 이유입니다. 그러나 절전이 iPhone 5에서 문제가된다면 주제에 대해 더 많은 스레드를 찾을 수 있다고 생각합니다. 찾을 수 없습니다. – user1230569

관련 문제