一次Swift核心数据非常慢

时间:2020-01-17 11:40:36

标签: swift xcode core-data

我正在完成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( ...

2 个答案:

答案 0 :(得分:0)

如果您首先是在模拟器或连接的设备上进行测试,则应删除

print("j:" + j.description)

当您加载大量数据时,它会减慢很多速度,因为您在那里存在循环,我想您出于开发目的而添加了此“ print”语句。

答案 1 :(得分:0)

CryptoSwift的最新版本引起了问题。我使用的是swift 4.2,对于该版本,我应该使用<= 0.15 CryptoSwift,而我使用的是1.3。值为0.15时,一切正常运行,没有5-6秒的延迟。