CWAC-Saferoom的数据库性能几乎翻了一番

时间:2019-09-05 13:50:36

标签: android performance commonsware-cwac

我正在对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) 
                }

0 个答案:

没有答案