【发布时间】:2012-10-03 06:11:07
【问题描述】:
我有一个 iOS 应用,有一个包含 1500 条记录的表。
我正在使用 FMDB,调用以下表单:
FMDatabase *db = ...
[db executeQuery:@"select num from a where b = ?", 6];
表“a”在“b”上有一个索引。
这在模拟器中运行良好,但在 iPad1 上需要很长时间。它会消耗内存,直到应用程序被杀死。 Instruments 说它卡在“sqlite3_prepare_v2”中。
原始查询还有一个“order by”子句。我已将其删除以进行测试。我什至可以完全删除 where 子句,它的行为仍然如此。
有什么想法可能是错的吗?
在此之前,其他查询正在运行。我之前曾从不同的线程访问过数据库,但没有任何其他线程正在进行访问。 我原以为我可能有一个悬空交易,但事实也并非如此。
【问题讨论】:
-
“消耗内存”是否意味着内存使用量在稳步增加?它是卡在
sqlite3_prepare_v2还是从它调用的某个函数中?对此查询使用单独的数据库连接会改变什么吗? -
是的,在 sqlite3_prepare_v2 调用中内存使用量增加。增加直到应用程序因内存不足而被杀死。创建第二个数据库连接似乎并没有改变行为,但它确实给了我缩小问题范围的想法,谢谢。