मैं एंड्रॉइड प्रोग्रामिंग के लिए नया हूं, हालांकि मैं SQLite डेटाबेस के साथ काम करने में काफी उपयोग कर रहा हूं।गरीब SQLite कार्यान्वयन? पहली बार डेटा एक्सेस रास्ता बहुत धीमा
मेरा आवेदन एसडी कार्ड पर एक SQLite3 डेटाबेस को खोलता है और एक अपेक्षाकृत जटिल क्वेरी चलाता है (5 मिलती है, 1 सबक्वेरी, 2 जहां खंड) का उपयोग कर
SQLiteDatabase.rawQuery
public Cursor queryDataBase(String sql, String[] selectionArgs){ Cursor c = myDB.rawQuery(sql, selectionArgs); return c; }
SQL विवरण द्वारा दिया जाता है एक हार्डकोडेड
String
।- क्वेरी 24 कॉलम के साथ 585 पंक्तियां लौटाती है।
- मैं संग्रहण स्थान और अनुक्रमण के बीच एक व्यापार बंद करना पड़ा है, लेकिन सभी बड़ी मेज पर (के बारे में ~ 40 000 प्रविष्टियों, अभी) अनुक्रमित उपयोग किया जाता है, SQLite क्वेरी के लिए पता चलता है:
Steps: 155 , Sorts: 0, AutoIdx: 1077
मैं नहीं कर रहा हूँ प्राथमिक कुंजी का उपयोग करके, इस प्रकार मैंने "_id" में कुछ भी नाम नहीं बदला।
कच्चेQuery का निष्पादन अपेक्षाकृत तेज़ है, निष्पादन समय लगभग 2 एमएस है।
- इस डेटा तक पहुंचने से बहुत अधिक समय लगता है, उदा। c.moveToFirst() द्वारा, निष्पादन समय लगभग 1700 एमएस है! (Cursor.getRowCount() के लिए, या स्पष्ट रूप से वास्तविक परिणाम सेट तक पहली बार पहुंच)।
- एक पीसी (2 गीगा, 1 जीबी रैम, सैटा 2 एचडीडी) पर ऐसा करना उदाहरण के साथ SQLiteSpy परिणाम सेट प्रदर्शित करने के लिए 15 एमएस लेता है।
- इसे सी ++ कार्यान्वयन के साथ पीसी पर करना यह 15 एमएस तक 30 एमएस है।
तो मैं यहां क्या खो रहा हूं? क्या यह वास्तव में संभव है कि 800 मेगाहट्र्ज, 2 जीबी रैम के साथ मेरा हैंडसेट, माइक्रोएसडी लगभग 120 गुना धीमा है?
एसडी एक बहुत भी आईडीई की तुलना में धीमी है। –
मुझे पता है ... मेरी पोस्ट अन्यथा – carbi84
ओह और बीटीडब्ल्यू ध्वनि के इरादे से नहीं थी ... भले ही मुझे पता है कि एमुलेटर रनटाइम्स वास्तव में कुछ भी नहीं कहता है, लेकिन क्या एम्यूलेटर एसडी कार्ड की गति को ध्यान में रखता है? मुझे नहीं पता, लेकिन मुझे नहीं लगता ... वैसे भी, एम्यूलेटर पर रनटाइम लगभग 10 सेकंड (10 000 एमएस) है, एचडीडी पर! – carbi84