我有一个快速编写的应用程序,最初运行良好,但随着时间的流逝,该应用程序会变得缓慢。我已经使用“分配和泄漏”配置文件打开了一个工具分析会话。
我发现分配大大增加,所做的事情只会覆盖当前数据。
有问题的内存在<非对象>
组中打开该组将提供数百种不同的分配,所有负责的库都是libvDSP。因此,我可以得出结论,这是vDSP调用无法正确释放内存。但是,双击其中的任何一个都不会给我显示任何代码,但是我看不懂原始语言。
调用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释放,因为它仅在该功能内部可用。
此函数有时每秒被多次调用。任何帮助将不胜感激,因为它只需要5mb,就可以在几秒钟内迅速增长200兆字节。
任何进一步调查泄漏源或一旦完成就适当地重新分配此内存的指针,将不胜感激。