2013-06-10 6 views
5

SQLite डेटाबेस से 10,000 पंक्तियों को स्मृति में लोड करने का सबसे तेज़ तरीका क्या है? प्रत्येक पंक्ति में 1 टेक्स्ट और 4 पूर्णांक होते हैं। वर्तमान में, मैं यह कर रहा हूं:SQLite डेटाबेस से 10000 पंक्तियों को लोड करने का सबसे तेज़ तरीका क्या है?

while(!cursor.isAfterLast()) { 
    cursor.copyStringToBuffer(column_index_1, buffer); 
    cursor.copyStringToBuffer(column_index_2, buffer); 
    cursor.copyStringToBuffer(column_index_3, buffer); 
    cursor.copyStringToBuffer(column_index_4, buffer); 
    cursor.copyStringToBuffer(column_index_5, buffer); 
    cursor.moveToNext(); 
} 

उपरोक्त कोड गैलेक्सी नेक्सस पर लगभग 750 एमएस लेता है। पुराने उपकरणों पर यह धीमा हो सकता है। क्या मैं इसे तेज़ी से बना सकता हूं?

(इस बिंदु पर, आप शायद कुछ लिख रहे हैं जैसे "आपको पंक्तियों को स्मृति में लोड करने की आवश्यकता क्यों है?" यह थोड़ा जटिल है, लेकिन अगर कोई दिलचस्पी लेता है तो मैं समझाने की कोशिश कर सकता हूं। संपादित करें: यहां स्पष्टीकरण है: https://gist.github.com/fhucho/af355d56ae3145e3e30f)

+2

मुझे इसमें रुचि पा सकते हैं! कृपया समझाएँ। :) –

+0

@ केनवॉल्फ ठीक है, मैं कुछ मिनटों के बाद स्पष्टीकरण के लिए एक लिंक पोस्ट करूंगा :) – fhucho

+0

यदि पंक्ति के सभी कॉलम एक ही बफर में कॉपी किए गए हैं तो यह एक SQL कथन बनाने की कोशिश के लायक हो सकता है जैसे "col1 का चयन करें || col2 || ... "sqlite को concatenation करने के लिए। यह तेज़ नहीं हो सकता है या नहीं हो सकता है। –

उत्तर

2

सबसे पहले मैं आपको केवल 1000 पंक्तियों को लोड करने के लिए सलाह देता हूं, और फिर अधिक लोड करने के लिए AsyncTask का उपयोग करें।

आप प्रतिक्रिया यहाँ http://www.javasrilankansupport.com/2012/11/asynctask-android-example-asynctask-in.html

आशा इस मदद

+1

ठीक है, * पंक्तियों के सभी * को असंकालिक रूप से लोड किया जाना चाहिए। यह पहली 1,000 पंक्तियों की तरह नहीं है। :-) – CommonsWare

+0

मैं इसे लगभग निश्चित रूप से असीमित रूप से करूँगा, लेकिन यह तथ्य नहीं बदलेगा, यह धीमा होगा :) – fhucho

संबंधित मुद्दे

 संबंधित मुद्दे