2017-12-26 7 views
0

나는 내 iOS 앱에 겉으로보기에는 무해한 변화를 만들었고 앱이 충돌 할 때까지 메모리 소비가 지속적으로 증가하기 때문에 앱이 충돌하고있다. 이것은 아마도 메모리 소비가 10 배 증가했을 것입니다.메모리를 가장 많이 차지하는 클래스를 어떻게 찾을 수 있습니까?

어떤 클래스 또는 구조체가이를 담당하는지 어떻게 알 수 있습니까?

CVPixelBuffer : 내가 좋아하는 뭔가를 찾고 있어요 8백메가바이트 CMSampleBuffer : 100메가바이트 CIImage : 나는 엑스 코드의 메모리 디버거 및 악기 모두에서 보았지만 아무것도 발견 50메가바이트

합니다.

+0

앱에서 메모리 누수를 찾으려고 했습니까? –

+1

아마도 여러분은 지역 변수로서 메모리 소비 유형을 도입했을 것입니다. 아마도 이론적으로 스택 공간을 고갈시킬 수있는 커다란 C- 배열 및 구조체 일 가능성이 있습니다. 아마도 힙에 무언가를 넣는 빡빡한 루프 일 가능성이 큽니다. 문제의 원인이되는 변경 사항을 좁힐 수있는 개정 내역이 없습니까? –

+0

@ Kamil.S 나는 어떤 일을 저지르고, 힘내려는 것이 아니라는 것을 알고 있습니다. 그것은 깊은 재귀가 없으므로 스택 공간에 관한 것이 아닙니다. 근면하게 새로운 코드를 주석 처리하고 라인별로 주석을 달아서 문제가 https://developer.apple.com/documentation/coreimage/cifilter/2138288-init에 있음을 발견했습니다. CIFilter를 작성하여 버리면, 메모리가 누출되어서는 안됩니다. 하지만 Xcode 나 Instruments는 우리에게 더 나은 방법, 즉 모든 클래스를 사용 된 메모리 (해당 클래스의 모든 인스턴스에 의해 점증 적으로)별로 정렬하는 방법을 제공합니까? –

답변

0

CIFilter initialiser에서 메모리 누수가 발생했습니다. 재현 할 단계는 다음과 같습니다.

  1. 원시 샘플 버퍼를 캡처하려면 AVFoundation을 사용하십시오.
  2. 전화 CMSampleBufferGetImageBuffer()는 CVPixelBuffer를 얻을 수 있습니다 :
  3. 는 CIFilter 만들기 : CIFilter가 버려진 것을
  4. 알 수 있습니다.
  5. 위의 모든 단계를 완료 한 후에 1 단계로 돌아가서 100 번 반복하십시오.

    let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)! 
    let metadata = CMCopyDictionaryOfAttachments(nil, sampleBuffer, kCMAttachmentMode_ShouldPropagate)! 
    _ = CIFilter(cvPixelBuffer: pixelBuffer, properties: metadata) 
    

    예상 결과 :

    신속 객체를 생성 및 메모리 누수가되지 않습니다 멀리 던지는

여기에 코드입니다.

실제 결과 : 아이폰 OS 응용 프로그램을 죽이기까지

  • 메모리 사용, 기가 바이트 이상의에 한정되지 않은 방식으로 성장한다.
  • CIFilter를 만드는 줄을 주석 처리하면이 문제가 해결됩니다.
  • dngPhotoDataRepresentation()을 사용하여 RAW 샘플 버퍼를 NSData로 변환하고이를 CIFilter 초기화 프로그램에 전달하면이 문제는 해결되지만 속도는 느려집니다.
  • CVPixelBuffer는 CIFilter (또는 iOS 내부의 다른 일부 코드가 누수 됨) 때문에 릴리스되지 않는 것 같습니다. CVPixelBuffer에 대한 약한 참조를 작성하여 확인했습니다. 버퍼가 해제되면 약한 참조가 nil이되어야하지만 그렇지 않습니다.

    _ = CIImage (cvImageBuffer : pixelBuffer 옵션 [kCIImageProperties는 : 메타])

샘플 버퍼 (대신 RAW의)을 BGRA 캡처 및 CIImage로 변환하여 메모리를 누설하지 않는
  • iPhone 7 Plus 및 iPhone X의 iOS 11에 있습니다.

  • 관련 문제