मैं अपने डिवाइस पर कुछ प्रदर्शन मुद्दों को देखकर काफी समय बिता रहा हूं, और ध्यान दिया है कि हमारे पास डीबी पढ़ने/लिखने वाले कुछ ऐप्स हैं ..InsertHelper क्यों बहिष्कृत किया गया था?
मैंने नए संपर्कों को सम्मिलित करने के लिए संपर्क API का उपयोग करके शुरुआत की & डेटा पंक्तियां, और यह दर्दनाक रूप से धीमी थी। 1 मिनट 18 सेकंड लगभग 1500 पंक्तियों (250 कच्चे संपर्क & 1250 डेटा पंक्तियों) ..
मैं प्रदर्शन आवेषण के लिए किसी अन्य ऐप्स में डालने सहायक का इस्तेमाल किया था सम्मिलित करने के लिए, और एक परीक्षण ऐप जो अलग db के लिए लिखने का फ़ैसला किया डब्ल्यू/अलग डालने के तरीके।
प्रत्येक डीबी में एक टेबल है, प्रत्येक डब्ल्यू/4 कॉलम: _ID, नाम, समय, और ब्लॉब (सभी प्रकार 'स्ट्रिंग') - जैसे संपर्क प्रदाता डेटा कॉलम को परिभाषित करता है।
_ID ऑटो वृद्धि पीके है, नाम सिर्फ उसी चीज को '1234567890' डालता है, समय केवल मिलिज़ में वर्तमान सिस्टम समय है, और ब्लॉब एक स्ट्रिंग डब्ल्यू/लंबाई 6400 अक्षर 'ए' से भरा है ...
मैं पहली बार थोक डालने की जाँच की है, लेकिन सभी यह करता है सब आवेषण आपके द्वारा परिभाषित के माध्यम से छोरों है, और बस के रूप में अलग-अलग आवेषण कर (या नगण्य प्रदर्शन प्रभाव) के रूप में धीमी है ..
मैं 3 अलग परीक्षण किया आवेषण करने के तरीके: ContentValues w/db.insert विधि: SQLiteStatement w/statement.execute() (लेनदेन के अंदर किया गया)। स्क्लाइट इंसर्ट हेल्पर डब्ल्यू/लेनदेन।
मैं कुछ कोड प्रदान कर सकते हैं, लेकिन मैं InsertHelper से उत्कृष्ट प्रदर्शन है, और सोच क्यों यह पदावनत किया गया था: 7.778 सेकंड (82 बाइट्स लिखा/एमएस) :
100 रिकॉर्ड ContentValues सम्मिलित करने के लिए समय SQLiteStatement: 1.311 सेकंड (48 9 बाइट्स लिखित/एमएस) स्क्लाइटइन्सर्टहेलपर: 0.2 9 2 सेकेंड (21 9 7 बाइट्स लिखित/एमएस)
कोई विचार?
मैं कुछ अतिरिक्त परीक्षण किया था, और एक नियमित रूप से डालने के लिए किया था, लेकिन यह एक लेन-देन का हिस्सा है, यह प्रदर्शन काफी सुधार किए गए। ऐसा लगता है कि कुछ कोड संभवतः उपज करने के लिए आवश्यक है (संपर्क प्रदाता को देख रहे हैं)। – Chrispix
आपके द्वारा उल्लिखित प्रदर्शन समस्या को देखते हुए, लेन-देन मेरा पहला सुझाव होगा (प्रत्येक लेन-देन के लिए राउंड-ट्रिप की आवश्यकता होती है IO प्रतीक्षा करता है, लेनदेन के बाहर प्रत्येक डालने को निश्चित रूप से एक में लपेटा जाता है)। अतीत में, यह उपयोगी पठन हो सकता है: http://stackoverflow.com/questions/14344172/android-bulk-insert-when-inserthelper-is-deprecated – rutter
मैंने लेन-देन का भी सुझाव दिया होगा। लेनदेन के साथ मैंने जिन आवेषणों का परीक्षण किया है, वे काफी तेज हैं। Http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html के अनुसार – Luis