我有一个iOS应用程序,其中有一个包含1500条记录的表。
我正在使用FMDB,调用以下格式:
FMDatabase *db = ...
[db executeQuery:@"select num from a where b = ?", 6];
表“a”的索引为“b”。
这在模拟器中运行良好,但在iPad1上需要很长时间。它会消耗内存直到应用程序被杀死。仪器称其卡在“sqlite3_prepare_v2”中。
原始查询还有一个“order by”子句。我已将其删除以进行测试。我甚至可以完全删除where子句,它仍然以这种方式运行。
任何想法可能出错?
在此之前,其他查询正在运行。我以前从不同的线程访问过数据库,但是没有任何其他线程可以访问。 我以为我可能会有一个悬空交易,但事实并非如此。
答案 0 :(得分:0)
那么,您是否尝试将结果提取到FMResultSet
?
并且,如果您使用 FMResultSet ,是否通过键入[rs close]
来关闭结果集?
这些是需要考虑的重要事项。
答案 1 :(得分:0)
我想我发现了问题。我有两个线程,每个线程都有一个FMDatabase对象。我认为发生的事情是我在事务中使用第一个数据库对象插入了许多行。我有一个逻辑错误,我从未提交过该交易。
虽然第一个数据库实例有这个大的挂起事务,但我试图从第二个数据库实例中选择同一个表中的所有内容。
显然造成了这种情况。显然在模拟器中,它并没有明显变慢。但它在iPad1上消耗了足够的内存和时间,导致应用程序被杀死。