0

我正在开发用于指纹匹配的专用 Android 设备。可以是此设备上具有 500K 记录的数据库。

我已经修改了这些设备上的 ROM 以使用指令增加堆大小 -

dalvik.vm.heapgrowthlimit=742m dalvik.vm.heapsize=812m

我正在尝试将大约 250MB 的数据库从 SQlite 预加载到内存中,这需要大量的时间。我已经使用 Android SQLite 接口在 java 中实现了这段代码。加载 32,000 条记录大约需要 10 分钟,使用 Android/Java 接口是否会失败,我应该在本机 C 代码中完成所有这些工作?

是否有任何改进可以使用 Android Java 界面加速光标加载?

当 Android 正在加载记录时,我不断看到这些消息:

-03 09:18:53.802 D/dalvikvm( 5234): GC_FOR_ALLOC freed 18K, 3% free 305194K/313816K, paused 187ms, total 187ms
10-03 09:18:53.982 D/dalvikvm( 5234): GC_FOR_ALLOC freed 0K, 3% free 305213K/313816K, paused 178ms, total 178ms
10-03 09:18:53.982 I/dalvikvm-heap( 5234): Grow heap (frag case) to 300.238MB for 4963-byte allocation
10-03 09:18:54.163 D/dalvikvm( 5234): GC_FOR_ALLOC freed 19K, 3% free 305204K/313824K, paused 176ms, total 176ms
10-03 09:18:54.333 D/dalvikvm( 5234): GC_FOR_ALLOC freed <1K, 3% free 305222K/313824K, paused 178ms, total 178ms
10-03 09:18:54.333 I/dalvikvm-heap( 5234): Grow heap (frag case) to 300.246MB for 4389-byte allocation
4

1 回答 1

1

您不需要更改大部分数据,因此您应该使用cdb或其替代品之一。这将加快对数据库的访问,并且您仍然可以使用 SQLite 来存储新的或更改的记录。实际上,如果您对数据使用原始内存转储格式,您可能会在加载时间上做得更好,但这可能会使搜索更加困难。如果搜索时间是个问题,请考虑使用 Lucene 将数据存储在 RAM 中。

SQL 只是加载此类数据的错误工具,即使您在具有 32G RAM 的 16 核服务器上运行它,我仍然推荐 cdb 或 Lucene。

于 2013-10-03T17:25:46.697 回答