Android SqlCipher 性能问题

标签 android sqlite encryption sqlcipher

我们将 SqlCiper sqlite 数据库集成到我们的 Android 项目中。我们发现未加密的 SqlCiper sqlite db 和加密的 SqlCiper sqlite db 的数据库查询性能存在很大差异。

我们只是在同一台 Android 设备上对我们的代码进行了一些基本的计时记录:

  • 未加密的 SqlCiper 数据库:100 数据库查询,总时间:1-2 秒
  • 加密的 SqlCiper 数据库:100 数据库查询,总时间:17 秒。

如您所见,在 SqlCiper 数据库中启用加密后,运行时间会大大增加。

基于这篇文章:SqlCiper Performance and SqlCiperSpeed ,我们不会在 iOS 上看到如此大的增长,但我在 Android 上没有看到任何性能数据。

你们看到的问题和我们看到的一样吗?有什么改进建议吗?

最佳答案

首先,确保您有值得担心的问题。单独使用 170 毫秒而不是 10 毫秒的查询不太可能对用户产生重大影响。在任何一种情况下,您都需要使用后台线程,因为即使 10 毫秒也足以让您丢掉一两帧,具体取决于其他情况。因此,如果您正在执行此查询以响应某些离散的用户请求(例如,点击操作项),用户不太可能注意到差异。仅当您在短时间内执行大量此类查询时,您才可能遇到可能会给用户带来问题的速度问题。

其次,请确保您已使用类似 the EXPLAIN keyword 之类的方式总体上调整了数据库访问。 . Android 的 SQLCipher 使糟糕的数据库 I/O 变得更糟,例如导致表扫描的查询(例如,由于没有正确的索引)。

第三,使用 Traceview 准确确定您的时间花在了哪里。

关于Android SqlCipher 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730918/

相关文章:

java - 为什么AES 128加密会扩展数据?

java - 如何在 Java 中将 RSA 公钥转换为 ssh-rsa 公钥?

android - 将统一变量传递给着色器时,GLES glError 1282

php - file_exists & is_file 不工作

java - 为什么 JNCryptor/RNCryptor 库会抛出 InvalidHMACException?

java - 有没有更强大的方法在 Android/Java/SQLite 中进行连接查询?

SQL 更新查询中的 Python 变量

java - 如何在不录制的情况下在 Android 上对麦克风进行采样以获得实时幅度/电平?

Android 启动错误的 Activity

android - 带有回调 URL 的 Twitter4j getOAuthRequestToken() 在 Android 上失败了吗?