2013-03-18 42 views
0

我有一個快速的性能問題;我有一個ListView適配器填充列表視圖,我打開我的sqlite數據庫,並在填充視圖結束時關閉它,我從SQLite數據庫填充有關列表行的一些信息。我注意到這樣做主要是在滾動的時候出現嚴重的性能問題,這很有意義。我想知道如何提高滾動的性能。我查詢數據庫大約3次。列表視圖適配器與SQLite查詢的

Database db = new Database(context); 
db.open(); 
viewHolder.first.setText(db.queryFirst()); 
viewHolder.second.setText(db.querySecond()); 
viewHolder.third.setText(db.queryThird()); 
db.close(); 

我要保持到數據庫的引用作爲一個實例變量公正公開,當我查詢關閉或者我應該如何去嗎?

+0

我通常在onCreate中打開數據庫並在onDestroy中關閉它。 – 2013-03-19 00:08:34

+0

我可能有可能發生的併發問題,因爲我有一些需要訪問數據庫的服務正在運行。 – 2013-03-20 06:18:23

+0

服務是否寫入數據庫。 – 2013-03-20 06:22:21

回答

2

我想知道如何提高滾動的性能。我查詢數據庫大約3次。

我推薦查詢整個適配器的數據庫一次。目前,您正在爲每行發送三個查詢,並且它們都沒有被緩存。從驅動器讀取是一個緩慢的過程,Cursors旨在非常有效地獲取大量數據,並且CursorAdapters被設計爲使用盡可能少的資源。使用一個Cursor和一個CursorAdapter將允許用戶滾動而不會注意到任何性能損失。

+0

你是對的我現在已經批量處理了我的查詢,並且加載延遲消失了。我必須退後一步,檢查我的總體邏輯,謝謝你的偉大答案! – 2013-03-20 07:40:15

0

還有一個名爲ORMLite的庫,它允許您輕鬆地操作數據庫,並返回一個列表,這意味着您首先加載數組,並且沒有任何滾動性能問題。這與數據庫的延遲加載部分結合使用,可以無縫地提高滾動的性能。