自从我将数据从ArrayList移动到Android上的sqlite数据库以来,我的性能严重下降。没有游标可以导致这样做,所以我怀疑问题在于我存储在BLOB字段中的图像。
应用程序创建 Cards ,其中包含 cardBitmap 字段,该字段在创建时会填充位图。
任何人都可以告诉我他们的经验,哪种解决方案更具性能:
任何建议都会有所帮助。谢谢!
答案 0 :(得分:10)
我还没有评论答案的声誉,所以我会将我的2句作为答案添加,请原谅我。
我正在寻找类似问题的答案,我不认为当前的答案令人满意,因为如果你问SQLite.org他们会告诉你它取决于blob大小和页面大小。
他们已经做了一个基准测试 - 不是在Android上 - 这表明在SQLite中存储blob对于小blob(高达20kB)比在单独文件上存储更快。 对于大于100kB的blob,性能下降很大,并且最好将blob存储在单独的文件中(user370605)推荐。 见http://www.sqlite.org/intern-v-extern-blob.html
我会考虑Android没有回答的问题。
答案 1 :(得分:8)
第一个解决方案更好,使用sdcard中的文件并将参考路径存储在sqlite数据库中,这样可以提高性能,同时数据库仍然保持轻量级。
答案 2 :(得分:1)
我也没有足够的声誉来发表评论。我正在添加此答案,以帮助仍在寻找建议的任何人。经过几年的硬件改进,这两种解决方案的性能差别不大。我在Nexus 6p中尝试了几次,向SQLite写一个大约2 MB的图像二进制文件,平均只花费50毫秒。即使外部存储器性能更好,但目前的性能可以达到我的预期。写入SQLite不需要WRITE_EXTERNAL_STORAGE权限,如果从其他应用程序授予权限,则可以撤消该权限。在这种情况下,SQLite可能是一个不错的选择。