Как можно эффективно сохранить 20K-объекты в CoreData в Swift? - PullRequest
0 голосов
/ 13 октября 2018

Мне стало интересно, существует ли эффективный способ сохранения 20 000 объектов в CoreData.В настоящее время их сохранение занимает около 2 минут, и было бы здорово, если бы я мог сделать это быстрее.

Теперь я делаю сохранение следующим образом:

for serverCar in serverCars {
    let dbObjectCar = DBObjectCar.createWithAttributes(["carNbr" : serverCar.carNbr! as AnyObject], context: context) as DBObjectCar
    self.handleCar(serverCar: serverCar, dbObjectCar: dbObjectCar, defaultContext: context)
}

где

class func createWithAttributes(_ attributes: [String : AnyObject], context: NSManagedObjectContext = DBContext.defaultContext) -> Self {
    let object = create(context: context)
    if attributes.count > 0 {
        object.setValuesForKeys(attributes)
    }
    return object
}

create метод это:

class func create(context: NSManagedObjectContext = DBContext.defaultContext) -> Self {
    let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: context)
    let object = self.init(entity: entityDescription!, insertInto: context)

    return object 
}

и

fileprivate func handleCar(serverCar: ServerCar, dbObjectCar: DBObjectCar, defaultContext: NSManagedObjectContext) {
    _ = Mapper.Map(serverCar, dbo: dbObjectCar, context: defaultContext)
}

и Mapper это:

class func Map(_ serverCar: ServerCar, dbObjectCar: DBObjectCar, context : NSManagedObjectContext) -> DBObjectCar {
    if let carNbr = serverCar.carNbr {
        serverCar.setValue(carNbr, forKey: "carNbr")
    }

    return serverCar
}

, а также я хочучтобы представить мои классы объектов:

open class DBObjectCar: NSManagedObject { ... }
struct ServerCar : JSON { ... }

Итак, главная проблема для меня заключается в том, как я могу ускорить сохранение этих 20 000 автомобильных объектов?Я буду очень признателен за ваши ответы!Если у вас есть какие-либо вопросы - пожалуйста, спросите меня, может быть, я забыл упомянуть что-то или поделиться некоторыми частями моего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...