在我的应用程序中,我连接到firebase数据库并运行非常简单的功能(例如实际上仅更新一个值)... 如果我连续执行相同的功能(例如连续5次),则该程序几乎会死机,并且需要很长时间才能解决该请求。
从Xcode的“内存”概述中可以看到它被淹没了。
更新:添加了更好的图像。我在1,2和3号使用了4次(高尖峰)功能,CPU处理下降,而编号为4的应用程序冻结了30秒,并且内存趋于平坦。
我在这里做错什么了吗?
下面,我展示了一个我运行了几次的函数:
func addToStat(characterId: String, key: Int, value: Any, completion: @escaping StatusCompletion) {
guard authProvider.currentUser?.uid != nil else {
let error = NetworkManagerError.init(description: keys.userNotAutorized)
completion(.failure(error))
return
}
let childString = String(key)
let ref = baseProvider.child(keys.characters).child(characterId).child("stats").child(childString)
ref.setValue(value) { ( error, reference) in
if let error = error {
let err = NetworkManagerError(description: error.localizedDescription, code: error._code)
completion(.failure(err))
}
completion(.success(true))
}
ref.removeAllObservers()
}
我希望释放内存,并关闭与Firebase的连接,以保持性能不变。
答案 0 :(得分:0)
只要内存不能跟上您执行的每个写操作的步伐,在我看来这就像预期的那样工作。
Firebase在您的应用程序执行的首次读取写入操作时打开客户端与服务器之间的连接。此时,它也建立其内部状态。这两个都使用一定量的内存。
客户端不一定在读/写之后立即关闭此连接,因为这将意味着您将花费大量的构建连接费用。它也不会破坏其整个内部状态。因此,这意味着将保留一块内存,直到您关闭该应用程序为止。
您也许可以减少actively closing the connection的内存使用量。