我正在对CWAC-Saferoom进行性能测试,以了解它对访问数据库的性能有多严重的影响。
我创建了两个应用程序,除了以下之外,它们的所有代码都相同:
private val dbName = "Encrypted_Database"
private val dbPassword = "Test_Password"
override val repositoryFactory: IRepositoryFactory by lazy {
RepositoryFactory(this)
}
override val safeHelperFactory: SafeHelperFactory by lazy {
SafeHelperFactory.fromUser(Editable.Factory.getInstance().newEditable(dbPassword))
}
override val database: Database by lazy {
if (SQLCipherUtils.getDatabaseState(context, dbName) == SQLCipherUtils.State.UNENCRYPTED) { SQLCipherUtils.encrypt(context, dbName, dbPassword.toCharArray()) }
Room.databaseBuilder(context, Database::class.java, dbName)
.fallbackToDestructiveMigration()
.openHelperFactory(safeHelperFactory)
.build()
}
按预期,其他应用程序没有任何SQLCipher / SafeHelperFactory utils。众所周知,这是一个简单的RoomDB。
这是开始变得有趣的地方。
在测量了函数的执行时间之后,我发现,使用安全室时,该应用程序在访问数据库方面的速度显着提高!
我创建了500,000个具有随机属性的随机对象,然后尝试将它们全部插入两个数据库中。
没有安全房的房间 =大约花费了45秒。
带安全房的房间 =大约花费了15秒。
我还进行了一些其他测试,并获得了这些结果,并且对象较少,这次的结果是非常混杂的,并且在误差范围之内,您可以在下面的图片中进行检查:
现在,我被困在试图将这些结果缠住我的头。有没有人经历过类似的事情?这根本不是我所期望的。也许我的测量方法有缺陷?
谢谢,如果这是不正确的“讨论”,请原谅! :)
编辑:功能级别的测量方法
detailedDishRepository.insertAll(dishes)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
timeStart = System.nanoTime()
}
.doAfterTerminate {
val elapsedTime = (System.nanoTime() - timeStart) / 1_000_000_000.0
insertTime.value = elapsedTime
println("It took $elapsedTime seconds to execute.")
}
.subscribe({
itemIds.value = it
}, {
println(it.printStackTrace())
})
.apply {
disposableList.add(this)
}