我有一个显示长列表数据的UITableView。使用部分并遵循How to solve slow scrolling in UITableView的消息。
流程是一个主要的UITableView&按一下从那里选择一行。
然而,3000件物品需要11秒才能显示出来。我怀疑是从sqlite的记录加载(我预先加载前200)。所以我把它减少到只有50个。
但是,无论我只预加载1还是500,时间都是一样的。
视图来自IB,所有视图都是不透明的。
我对如何检测问题没有想法。我运行仪器工具,但不知道该看什么。
此外,当用户从之前的UITable中选择一个单元格时,没有显示视觉反馈(即:单元格未被选中)一段时间,所以他认为他没有选择它并尝试几次。与此问题有关。
怎么办?
注意:问题仅出在实际设备中:
答案 0 :(得分:2)
- [FMResultSet next]调用可能是一个非常昂贵的调用,具体取决于加载的数据。在此调用期间,sqlite实际上是进入数据库,找到要返回的下一行,并返回相应的字段。它不仅仅是一个普查员。
您可能需要考虑在实际显示表之前预先缓存所有数据。这意味着您可以在表格显示在屏幕上之前完成所有FMDB调用。
如果这花费的时间太长,您可能希望使用其初始行显示tableview,然后使用NSOperations或仅使用第二个线程在后台加载数据并以此方式对其进行缓存。
答案 1 :(得分:0)
没有看到任何代码,我想我会倾向于认为你需要为表索引。
通过在查询的属性上添加索引,您应该会看到极大的加速。您可以使用CREATE INDEX
SQL命令来执行此操作。