Я пытаюсь найти лучший способ для массового удаления объектов внутри моей базы данных Core Data.Основные данные Производительность deleteObject и сохранение контекста управляемого объекта
У меня есть объекты с родительскими/дочерними отношениями. Иногда мне нужно «обновить» родительский объект, очистив все существующие дочерние объекты и добавив новые в Core Data. «Удалить все» часть этой операции - это то место, где я столкнулся с проблемой. Я выполняю это, перебирая дочерние элементы и вызываю deleteObject для каждого из них.
Я заметил, что после вызова NSManagedObjectContext: Save после всех вызовов deleteObject происходит очень медленно, когда я удаляю 15 000 объектов.
Как я могу ускорить этот вызов? Есть ли вещи во время операции сохранения, о которых я могу знать и избегать, задавая разные параметры или настраивая мою модель другим способом? Я заметил, что всплески памяти во время этой операции также. Я просто хочу «удалить * из».
Спасибо.
Спасибо, я попробую это и опубликую свои результаты. Вызывают ли эти методы удаление объектов из sqlite db? Я не хочу отключать и сиротить объекты. – toofah
Да, объект удален. Но я не понимаю ваш момент: удаление их всех в цикле, а затем сохранение контекста достигает точно такого же эффекта. Единственная разница может быть в выступлениях, и ваши результаты скажут нам, если это так или нет. –
Мне нравятся эти изменения, потому что они, похоже, немного упрощают код, но, похоже, они не исправляют проблемы с производительностью и памятью. Когда я помещал это количество данных в Core Data, я делаю довольно здоровенное управление памятью, чтобы держать вещи под контролем. Может быть, мне нужно будет применить некоторые из тех же принципов здесь: создать собственный NSAutoreleasePool и вымыть его так часто, чтобы избавиться от временных объектов Core Data, также переустановить контекст управляемых объектов на этом этапе, чтобы убедиться, что мы не держимся к ненужным объектам из отношений. Возможно, это ускорит все. – toofah