2012-10-05 11 views
11

डालने के लिए ग्रीनडाओ 40 सेकंड मैंने ग्रीनडाओ चुना है क्योंकि यह साइट कहती है कि यह एंड्रॉइड के लिए सबसे तेज़ ओआरएम सिस्टम है। मेरे अभिविन्यास के लिए सैमसंग i9001 पर 600 रिकॉर्ड डालने के लिए इसे 40 सेकंड की तरह लगता है। मुझे यकीन नहीं है कि मैं कुछ गलत कर रहा हूं।600 रिकॉर्ड

क्या आप उन परिचालनों को करने में कितना समय लगाना चाहते हैं, कम करने के लिए कुछ सुझाव दे सकते हैं?

जनरेटर कोड:

private static void addNewsArticle(Schema schema) { 
    Entity article = schema.addEntity("NewsArticle"); 
    article.addIdProperty().autoincrement(); 
    article.addStringProperty("title").notNull(); 
    article.addStringProperty("body").notNull(); 
    article.addStringProperty("shortDescription").notNull(); 
    article.addStringProperty("thumb"); 
    article.addDateProperty("date").notNull(); 
} 

सम्मिलन

Date now = Calendar.getInstance().getTime(); 
for (int i = 0; i < 600; i++) { 
    NewsArticle testArticle = new NewsArticle(); 
    testArticle.setTitle("title-text" + i); 
    testArticle.setBody("body-text" + i); 
    testArticle.setShortDescription("short-text" + i); 
    testArticle.setDate(now); 
    newsArticleDao.insert(testArticle); 
} 

उत्तर

36

जैसा कि मैंने संदिग्ध चीजें एक भी एसक्यूएल बयान के भीतर क्रियान्वित नहीं किया गया। इसे प्राप्त करने के लिए बस डीएओ ऑब्जेक्ट पर insertInTx का उपयोग करें।

यहाँ मामूली परिवर्तन है कि ऐसा लगता है कि में चलाने बनाने के साथ ऊपर कोड है आधा दूसरा

NewsArticle[] newsArticles = new NewsArticle[600]; 
NewsArticle testArticle; 
    for (int i = 0; i < 600; i++) { 
     testArticle = new NewsArticle(); 
     testArticle.setTitle("title-text" + i); 
     testArticle.setBody("body-text" + i); 
     testArticle.setShortDescription("short-text" + i); 
     testArticle.setDate(now); 
     newsArticles[i] = testArticle; 
    } 
newsArticleDao.insertInTx(newsArticles); 
+3

इससे पहले कि आप 3 साल में मेरे गधे को बचाया गया। – Youtoo

+0

मैं अपने डेटाबेस का भार साबित करता हूं (01:30 मिनट से ~ 1 तक)। बहुत बहुत धन्यवाद!। – VIX

9

आप भी एक नया Runnable कि सभी आवेषण करता है बना सकते हैं DaoSession.runInTx समारोह में चलता है एक

daoSession.runInTx(new Runnable { 
    public void run(){ 
     Date now = Calendar.getInstance().getTime(); 
     for (int i = 0; i < 600; i++) { 
      NewsArticle testArticle = new NewsArticle(); 
        testArticle.setTitle("title-text" + i); 
        testArticle.setBody("body-text" + i); 
        tesArticle.setShortDescription("short-text" + i); 
        testArticle.setDate(now); 
        newsArticleDao.insert(testArticle); 
     } 
    } 
}); 
1

एंड्रॉइड के लिए एसक्यूएलआईटी डालने के संचालन को तेज करने पर एक उत्कृष्ट लेख यहां दिया गया है। कोशिश करें मैं 39 एमबी डीबी समन्वयित करने में 1.2 घंटे से 14 मिनट तक नाटकीय रूप से सिंक मॉड्यूल की गति को अनुकूलित कर सकता हूं।

http://tech.vg.no/2011/04/04/speeding-up-sqlite-insert-operations/

मुझे मामले में अगर आप कोड spinnets आवश्यकता है।

+0

यह एक उत्कृष्ट लेख है, लेकिन लेनदेन का उपयोग करने के लिए ग्रीनडाओ में पहले ही अनुकूलन है। उपयोगकर्ता मध्यरात्रि का जवाब सबसे अच्छा है। –

0

मैं नीचे उल्लेख की कोशिश की और सबसे अच्छा प्रदर्शन

 DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db-name", 
       null); 
     SQLiteDatabase dbGreen= helper.getWritableDatabase(); 

     dbGreen.beginTransaction(); 

     //Perform your insertion here 
     dbGreen.setTransactionSuccessful(); 
     dbGreen.endTransaction(); 
संबंधित मुद्दे