我正在完成swift应用程序的新版本,我注意到从核心数据加载变得非常缓慢。在最新版本的应用中,相同的代码效果很好,但在新版本中,它非常慢。代码在下面,并且与上一版本一样100%相同,但是现在我必须等待5-6秒钟的缓存,并且在测试新旧版本时缓存数据也相同!
我已经为此失去了几天,等待解决,以便我可以发布更新的应用程序。我打印索引只是为了查看打印全部600个索引要花多少时间,在上一版本中最多要花1秒钟,而在新版本中,相同代码要花5到6秒钟!
我只是发现ObjectTMP.init(...在最新版本中花费时间,而在最新版本中却没有。我将对其进行更多调查
对此有任何帮助。
DispatchQueue.global(qos: .userInitiated).async {
if #available(iOS 10.0, *) {
// load
//We need to create a context from this container
let managedContext = self.appDelegate.persistentContainer.newBackgroundContext()
//Prepare the request of type NSFetchRequest for the entity
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Cache")
do {
let result = try managedContext.fetch(fetchRequest)
var j = 0
for data in result as! [NSManagedObject] {
...
hash[String(Int(data.value(forKey: "id") as! String)] = ObjectTMP.init( ...
答案 0 :(得分:0)
如果您首先是在模拟器或连接的设备上进行测试,则应删除
print("j:" + j.description)
当您加载大量数据时,它会减慢很多速度,因为您在那里存在循环,我想您出于开发目的而添加了此“ print”语句。
答案 1 :(得分:0)
CryptoSwift的最新版本引起了问题。我使用的是swift 4.2,对于该版本,我应该使用<= 0.15 CryptoSwift,而我使用的是1.3。值为0.15时,一切正常运行,没有5-6秒的延迟。