我們有約10個sqlite文件在我們的應用程序中下載,每個包含大約4000行。我們處理這些數據並將其顯示在tableview中。滾動瀏覽tableview時,我們遇到了速度和內存問題。用於iPhone的sqlite vs csv文件
我們在想,不管sqlite文件,如果我們有csv文件或其他格式,我們是否可以比sqlite獲得更好的性能?我已經讀過xml或json不會有幫助,因爲記錄數量太大,解析時間會增加。
請建議。
我們有約10個sqlite文件在我們的應用程序中下載,每個包含大約4000行。我們處理這些數據並將其顯示在tableview中。滾動瀏覽tableview時,我們遇到了速度和內存問題。用於iPhone的sqlite vs csv文件
我們在想,不管sqlite文件,如果我們有csv文件或其他格式,我們是否可以比sqlite獲得更好的性能?我已經讀過xml或json不會有幫助,因爲記錄數量太大,解析時間會增加。
請建議。
首先,不要以爲SQLite是你的瓶頸。我在自己的應用程序中做了相同的假設,並花了數天的時間試圖優化數據庫訪問,只是針對它運行Instruments,並發現我的界面中有一個緩慢的字符串處理例程,使事情陷入困境。
首先使用Time Profiler和Object Allocations來驗證熱點在代碼中的位置。 SQLite的速度非常快。
這就是說,對於4000行,如果嘗試將所有行加載到數組中以便顯示在屏幕上,至少會遇到內存問題。我的建議是將這些數據導入到Core Data SQLite數據庫中,並使用一個NSFetchedResultsController,其批處理大小設置爲其獲取請求比屏幕上顯示的行數稍大。
核心數據將以這種方式處理批量數據的加載/卸載,這意味着只有一小部分數據庫一次加載到內存中。這會導致巨大的加速(特別是在初始加載時),並且會顯着減少內存使用量。它也使用一個微不足道的代碼。
正確索引的SQLite數據庫將在任何平面文件周圍運行圓圈,尤其是在您有大量記錄的情況下。也可以嘗試將這10個文件合併到一個數據庫中,這樣您就可以在索引列上執行連接並使用諸如視圖之類的聰明技巧。現在,您似乎從10個不同的數據庫提取數據並手動比較/處理它們,這當然需要大量時間和內存。
它將取決於應用程序,您如何使用和查詢數據。配置文件,確認sqlite是或不是問題。然後攻擊分析結果。
你有沒有什麼辦法來分析它?你可以添加性能計時器來準確查看瓶頸發生的位置嗎? – Zac 2011-01-07 21:59:31
內存問題是因爲我們試圖從sqlite獲取儘可能多的數據到數組中。自從我們讀取數組並顯示數據後,這使得滾動速度更快。然而,我們在數組中放入的數據越多,我們越早遇到內存問題,並且我們必須釋放一些數據,然後可能會重新提取它,如果用戶滾動到顯示它的tableview中的那個位置。我們也嘗試只提取tableview的可見區域的數據。 – 2011-01-07 22:09:59