0

我有一个 iOS 应用程序,有一个包含 1500 条记录的表。

我正在使用 FMDB,调用以下表单:

FMDatabase *db = ...
[db executeQuery:@"select num from a where b = ?", 6];

表“a”在“b”上有一个索引。

这在模拟器中运行良好,但在 iPad1 上需要很长时间。它会消耗内存,直到应用程序被杀死。Instruments 说它卡在“sqlite3_prepare_v2”中。

原始查询也有一个“order by”子句。我已将其删除以进行测试。我什至可以完全删除 where 子句,它仍然以这种方式运行。

有什么想法可能是错的吗?

在此之前,其他查询正在运行。我之前曾从不同的线程访问过数据库,但没有任何其他线程正在进行访问。我曾以为我可能有一个悬空交易,但事实也并非如此。

4

2 回答 2

0

那么,您是否尝试将结果提取到FMResultSet?

而且,如果您使用的是FMResultSet,您是否通过键入来关闭结果集[rs close]

这些都是需要考虑的重要事项。

于 2012-10-04T10:17:40.213 回答
0

我想我找到了问题所在。我有两个线程,每个线程都有一个 FMDatabase 对象。我相信发生的事情是我在事务中使用第一个数据库对象插入了许多行。我有一个逻辑错误,我从未提交过交易。

虽然第一个数据库实例有这个大的待处理事务,但我试图从第二个数据库实例的同一个表中选择所有。

显然,这是造成这种情况的原因。显然在模拟器中,它并不明显慢。但它在 iPad1 上消耗了足够的内存和时间,导致该应用程序被杀死。

于 2012-10-04T17:33:14.567 回答