У меня утечка памяти (память приложения только увеличивается) при использовании прогноза CoreML.Я не могу найти какую-либо документацию или примеры, где что-то выпускается, что я мог бы пропустить.В моем реальном проекте у меня отключен ARC, но не здесь (поэтому компилятор не позволяет мне что-либо выпускать вручную, поэтому я думаю, что те вещи, которые я пробовал, не нуждаются в этом)
IЯ уменьшил его до минимального случая, доступного на github .Но вот 99% (хранилище просто имеет модель и дополнительные ресурсы проекта, а также больше проверок на ошибки - ошибок нет, прогноз работает нормально, но урезан для стекового потока)
#import <Cocoa/Cocoa.h>
#import "SsdMobilenet.h"
#include <string>
#include <iostream>
uint8_t ImageBytes[300*300*4];
CVPixelBufferRef MakePixelBuffer(size_t Width,size_t Height)
{
auto* Pixels = ImageBytes;
auto BytesPerRow = Width * 4;
CVPixelBufferRef PixelBuffer = nullptr;
auto Result = CVPixelBufferCreateWithBytes( nullptr, Width, Height, kCVPixelFormatType_32BGRA, Pixels, BytesPerRow, nullptr, nullptr, nullptr, &PixelBuffer );
return PixelBuffer;
}
int main(int argc, const char * argv[])
{
auto* Pixels = MakePixelBuffer(300,300);
SsdMobilenet* ssd = nullptr;
for ( auto i=0; i<10000; i++ )
{
if ( !ssd )
{
ssd = [[SsdMobilenet alloc] init];
}
auto* Output = [ssd predictionFromPreprocessor__sub__0:Pixels error:nullptr];
}
return 0;
}
Есть ли что-тоЯ должен очистить, освободить, освободить, сдать?Я пытался выпустить ssd и воссоздавать его каждую итерацию, но это не помогает.
На HighSierra 10.13.6, xcode 10.1 (10B61).
Утечка происходит на этом imac 2011 года (без металла, при выполнении процессора) и MBP Retina 2013 года (который работает на GPU), а также с другими моделями, не только с SSDMobileNet.
Редактировать 1: Видв инструменты, используя Generations / Snapshots, действительно кажется, что это утечка выходных данных, но я не могу dealloc
или release
, так что, может быть, мне нужно что-то еще сделать, чтобы освободить результаты?<non-object>
- это все распределения внутри вызовов apply_convulution_layer()
глубоко внутри CoreML.