У меня есть приложение, написанное на swift, которое изначально отлично работает, но со временем приложение становится вялым.Я открыл сеанс профилирования инструментов, используя профиль Allocation and Leaks.
Что я обнаружил, так это то, что распределение резко увеличивается, делая что-то, что должно только перезаписывать текущие данные.
Указанная память находится в группе <не объект>
Открытие этой группы дает сотни различных распределений, причем ответственной библиотекой является libvDSP.Итак, с этим я могу заключить, что это вызов vDSP, который не освобождает память должным образом.Однако двойной щелчок по любому из них не дает мне никакого кода, но необработанный язык я не понимаю.
Функция, к которой относится callas vDSP, выглядит следующим образом:
func outOfPlaceComplexFourierTransform(
setup: FFTSetup,
resultSize:Int,
logSize: UInt,
direction: FourierTransformDirection) -> ComplexFloatArray {
let result = ComplexFloatArray.zeros(count:resultSize)
self.useAsDSPSplitComplex { selfPointer in
result.useAsDSPSplitComplex { resultPointer in
vDSP_fft_zop(
setup,
&selfPointer,
ComplexFloatArray.strideSize,
&resultPointer,
ComplexFloatArray.strideSize,
logSize,
direction.rawValue)
}
}
return result
}
Вызывается из другой функции:
var mags1 = ComplexFloatArray.zeros(count: measurement.windowedImpulse!.count)
mags1 = (measurement.windowedImpulse?.outOfPlaceComplexFourierTransform(setup: fftSetup, resultSize: mags1.count, logSize: UInt(logSize), direction: ComplexFloatArray.FourierTransformDirection(rawValue: 1)!))!
Внутри этой функции mags1 управляется и перезаписывает существующий массив.Насколько я понимаю, mags1 будет освобожден после завершения этой функции, поскольку он доступен только внутри этой функции.
Эта функция вызывается много раз в секунду.Любая помощь будет оценена, так как то, что занимает всего 5 МБ, очень быстро увеличивается на двести мегабайт за пару секунд.
Буду признателен за любые указатели для дальнейшего изучения источника утечки или для правильного освобождения этой памяти после ее завершения.