Мы находим, что установление объекта в области и последующее добавление к этому объекту более мелкими порциями, кажется, не только помогает с проблемами в памяти, но также значительно уменьшает размер файла.
Наш проект должен был прочитать и обрабатывать файлы размером более 50 Гб, и мы обнаружили, что запись около 1000 объектов за раз, казалось, является балансом между скоростью, размером файла и памятью. Ваш пробег может отличаться.
Я произвел рефакторинг вашего кода и добавил несколько циклов for, чтобы показать, что происходит, но попробуйте это и посмотрите, лучше ли по сравнению с ним объем памяти.
Это пишет Всего 10 элементов меньшими порциями, что, как упоминалось в моем комментарии, уменьшает общий размер файла. для вашего примера внешнее значение l oop будет равно 40, а внутреннее значение будет равно 1000.
let leakTestList = LeakTestList()
try? realm.write {
realm.add(leakTestList)
}
var index = 0
for _ in 0..<2 {
var myItems = [LeakTestItem]()
for _ in 0..<5 {
let item = LeakTestItem( value: ["data": index] )
myItems.append(item)
index += 1
}
try? realm.write {
leakTestList.items.append(objectsIn: myItems)
}
}