Realm-java 在打开太多事务时影响随机数生成器

问题描述 投票:0回答:0

这是一个关于 Realm 和 Kotlin 随机数生成器内部工作原理的问题。当我错误地在后台线程上打开了多个 Realm 事务实例(偶然多达 100 个)时,我观察到将 Realm 对象字段值设置为 kotlin.Random.nextInt() 会导致超过 20% 的时间发生冲突,这不应该发生。

Realm(或一般的内存)会在 kotlin.Random 上造成这样的副作用吗? 直觉上,随机数生成器不应受到我们本地数据库使用的影响。这也会影响像 UUID.randomUUID() 这样的行为吗?

此外,我知道 Realm 应该关闭 - 我真的很好奇为什么会这样。

open class MyObject: RealmObject {
   var randomField: Int
}

fun test() = scope.launch { // background thread
            var messageDupes = 0
            var r = Realm.getInstance()
            while (idx < 100) {
                r = Realm.getInstance()  // opening of Realm without closing

                val random = Random.nextInt() // Why would this be affected? Has many collisions


                val existing = r.where<MyObject>.equalTo("randomField", random)
                if (existing != null) {
                    collisions++
                }
                
                val obj = MyObject()

                obj.randomField = random //set field to the random value
                r.executeTransaction {
                    it.insert(message)
                }
                idx++
                delay(300L)
            }
            val count = r.where<MyObject>().count()
            log.debug("total objects: $count; collisions=$collisions")
        }
android random realm realm-java
© www.soinside.com 2019 - 2024. All rights reserved.