CoreData实体结构:
Invoice <---->> Invoiceline <<-----> Product
NSManaged对象类实现

// intended to be overridden by the subclass
class var entityName { /* return the entity name */ }

// generic class function to create new entity
class func create() -> NSManagedObject
{
  let context = // the main context
  let record = NSEntityDescription.insertNewObjectForEntityForName(self.entityName, inManagedObjectContext: context)
  return record
}

示例事务:
let product = // a product object
let invoice = Invoice.create() as! Invoice
let invoiceLine = InvoiceLine.create() as! InvoiceLine

invoiceLine.product = product
invoiceLine.invoice = invoice

// complete the transaction
invoice.checktout()

当插入coredata的发票数达到200K时,设置invoiceLine'sproduct属性花费的时间太长:
invoiceLine.product = product

所以,我使用XCode工具检查内存分配,我发现每次我invoiceLine.product = product时,coredata都在为invoiceLines加载所有相关的product,在我的例子中是6K的invoiceLines,所以当我将另一个productinvoiceLine关联时,它将再次为那个特定的invoiceLine加载所有相关的product,最终内存分配会越来越大。
问题:当我加载coredata时,是否可以阻止它加载所有相关的invoiceLine

最佳答案

我不知道这是否是一个好的实践,但是我通过切断productinvoiceline的逆关系来减少执行时间:
invoiceLine ----> product
这一次,CoreData没有理由为我不需要的特定invoiceline加载所有相关的product,从而提高了性能。

关于swift - Coredata:设置相关对象花费的时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41993402/

10-11 20:52