2012-04-29 70 views
9

我正在开发一个需要在桌面上存储位图的项目。这些位图用于数据适配器以显示在列表中。该表格可能包含超过1000个图像。我目前没有存储到文件的原因是因为我可以以多快的速度读取和写入图像到数据库。SQLite游标如何在内部工作?

我基本上在寻找的是理解SQLite光标的局限性。游标如何加载到内存中?它将查询结果放在内存中还是创建某种类型的临时读/写文件?我不想遇到查询大型数据集导致设备内存不足的问题。

+0

有[CursorWindow](http://developer.android.com/reference/android/database/CursorWindow.html),它似乎只用于加载查询的部分内容,无论何时moveToXyz。数据应该直接来自数据库。 – zapl

+0

“我正在开发一个需要在桌面上存储位图的项目。” - ick。 “这张表格可能包含1000多张图片。” - 更多ick。 “我目前没有存储到文件的原因是因为我可以以多快的速度读取和写入图像到数据库。” - 根据定义,文件将会更快或更快,因为SQLite必须将其文件存储在文件中。 – CommonsWare

+0

zapl感谢那些信息。 @CommonsWare不知道什么ick意味着:P我认为它看起来应该快或更快从文件读取比数据库。除了如何使用它们,我不太了解游标......但是SQLite不会高度优化您从数据中读取的方式吗?我的意思是多次读取文件中的图像数据似乎比从光标读取文件要慢很多。 – Jona

回答

0

这是我做过的一个旧帖子。我的解决方案是将图像保存到文件并将路径保存到数据库表中。这是更清洁,似乎更快。

将大型二进制数据保存到表中似乎不是正确的做法。我没有详细的信息来说明为什么不是一个好主意,但这只是我从一点研究中感受到的。

1

如果我记得,它会保持很多结果缓存在内存中。它通常应该低于soft heap limit。这是一个咨询限制,所以它会优先超过返回SQL_NOMEM的限制。

我不相信它写入任何缓存机制的磁盘。只要每张图片都适合内存,并且它们不在索引中,这应该不是问题。

我不是一个android程序员,它是值得的。其中一些东西可能已经定制。

作为背景,sqlite_step是默认库中的游标。我不知道android是否已经实现了它自己的机制。您可以在他们的页面上找到有关dynamic memory allocation的一些常规信息。