2009-07-04 100 views
2

我有一個UITableView顯示一長串數據。使用部分並遵循How to solve slow scrolling in UITableView的消音。緩慢加載UITableView。怎麼知道爲什麼?

該流程加載一個主要的UITableView &按一秒鐘從那裏選擇一行。

但是,3000個項目需要11秒才能顯示。我懷疑從sqlite的記錄加載(我預先加載的第一個200)。所以我把它減少到只有50塊。

但是,無論我預加載只有1還是500,時間都是一樣的。

視圖由IB製成,全部不透明。

我在如何檢測問題中用盡了想法。我運行儀器工具,但不知道要看什麼。

此外,當用戶從前一個UITable中選擇一個單元格時,沒有視覺反饋顯示(即:單元格未被選中)一段時間,因此他認爲他不會選擇它並嘗試多次。與這個問題有關。

怎麼辦?

注:這個問題只有在實際設備:

  • 的iPod Touch 2D代
  • 使用FMDB爲SQLite的API
  • 否則在viewDidLoad中
  • 緩存使用的NSDictionary的緩存
  • 使用NSAutoreleasePool作爲緩存部分。
  • 只緩存行ID & MAC 4個字段necesary以顯示單元數據
  • 的UIView與界面生成器製成,SDK 2.2.1
  • 儀器說我使用2.5 MB在設備
+0

我在儀器中進行了第二次觀察,最接近的預期調用是fmresultset(來自fdbm庫) – mamcx 2009-07-04 17:08:40

+0

您是否分析了執行提取數據的SQL查詢需要多長時間? – teabot 2009-07-04 17:44:40

回答

2

的 - [FMResultSet next]調用可能是一個非常昂貴的調用,具體取決於正在加載的數據。在這次調用中,sqlite實際上會進入數據庫,找到下一行返回,並將相應的字段返回給您。這不僅僅是一個調查員。

在實際顯示錶格之前,您可能需要考慮預先緩存所有數據。這意味着您可以在表格顯示在屏幕上之前完成所有的FMDB調用。

如果這需要太長時間,您可能希望顯示tableview的初始行,然後使用NSOperations或僅使用第二個線程在後臺加載數據並以這種方式進行緩存。

0

沒有看到任何代碼,我想我會傾向於認爲你需要索引你的表。

通過在查詢的屬性上添加索引,您應該看到一個巨大的加速。您可以通過使用CREATE INDEX SQL命令來完成此操作。

相關問題