mmap()失败:无法在RealmSwift 2.10.2上分配内存大小:268435456 offset:2684354560

时间:2017-09-29 13:42:01

标签: ios swift realm xcode9

我的领域正在成长,所以我对内存分配大小有异常。我的领域大小约为3.2 GB所以我把这个领域的配置解决了这个问题:

let config = Realm.Configuration(
        // Set the new schema version. This must be greater than the previously used
        // version (if you've never set a schema version before, the version is 0).
        schemaVersion: 11,

        // Set the block which will be called automatically when opening a Realm with
        // a schema version lower than the one set above
        migrationBlock: { migration, oldSchemaVersion in

    },shouldCompactOnLaunch: {totalBytes, usedBytes -> Bool in
        guard totalBytes > 10 * 1024 * 1024 * 1024 else { return false }
        guard Double(usedBytes) / Double(totalBytes) < 0.5 else { return false }
        print("Should compact Realm database: \(usedBytes) / \(totalBytes)")
        return true

    })

Realm.Configuration.defaultConfiguration = config

然而,问题仍然存在。我做错了什么?

此致

1 个答案:

答案 0 :(得分:2)

我的猜测是你错过了autoreleasepool方法中的dispatch async

documentation显示你应该这样做。

// Query and update from any thread
DispatchQueue(label: "background").async {
    autoreleasepool { // <-- !!!
        let realm = try! Realm()
        let theDog = realm.objects(Dog.self).filter("age == 1").first
        try! realm.write {
            theDog!.age = 3
        }
    }
}

另一种可能性当然是你要多次插入大约100000个物体而不将它们切割成~1000批次。

另一种可能性是在自己的交易中插入每一项。

因此,超大型交易可以分配大量空间,但逐个插入每个项目也会占用大量空间,因此也是中间地带。