加载UITableView缓慢。怎么知道为什么?

时间:2009-07-04 16:46:02

标签: objective-c iphone performance

我有一个显示长列表数据的UITableView。使用部分并遵循How to solve slow scrolling in UITableView的消息。

流程是一个主要的UITableView&按一下从那里选择一行。

然而,3000件物品需要11秒才能显示出来。我怀疑是从sqlite的记录加载(我预先加载前200)。所以我把它减少到只有50个。

但是,无论我只预加载1还是500,时间都是一样的。

视图来自IB,所有视图都是不透明的。

我对如何检测问题没有想法。我运行仪器工具,但不知道该看什么。

此外,当用户从之前的UITable中选择一个单元格时,没有显示视觉反馈(即:单元格未被选中)一段时间,所以他认为他没有选择它并尝试几次。与此问题有关。

怎么办?

注意:问题仅出在实际设备中:

  • iPod Touch 2d代
  • 使用fmdb作为sqlite api
  • 在viewDidLoad中执行缓存
  • 使用NSDictionary进行缓存
  • 使用NSAutoreleasePool作为缓存部分。
  • 仅缓存行ID& mac 4字段需要显示单元格数据
  • UIView使用界面构建器SDK 2.2.1
  • 制作
  • 乐器说我在设备中使用了2.5 MB

2 个答案:

答案 0 :(得分:2)

- [FMResultSet next]调用可能是一个非常昂贵的调用,具体取决于加载的数据。在此调用期间,sqlite实际上是进入数据库,找到要返回的下一行,并返回相应的字段。它不仅仅是一个普查员。

您可能需要考虑在实际显示表之前预先缓存所有数据。这意味着您可以在表格显示在屏幕上之前完成所有FMDB调用。

如果这花费的时间太长,您可能希望使用其初始行显示tableview,然后使用NSOperations或仅使用第二个线程在后台加载数据并以此方式对其进行缓存。

答案 1 :(得分:0)

没有看到任何代码,我想我会倾向于认为你需要为表索引。

通过在查询的属性上添加索引,您应该会看到极大的加速。您可以使用CREATE INDEX SQL命令来执行此操作。