GreenDAO 40 segundos para insertar 600 registros

He elegido greenDAO porque su sitio afirma que es uno de los sistemas ORM más rápidos para Android. Para mi decepción se tarda como 40 segundos para insertar 600 registros en Samsung i9001. No estoy seguro si estoy haciendo algo malo.

¿Podría sugerir algo para disminuir la cantidad de tiempo que se tarda en realizar esas operaciones?

Generador de código:

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(); } 

Inserciones

 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); } 

Como sospeché que las cosas no se ejecutaron dentro de una sola declaración de sql. Para lograrlo, simplemente use insertInTx en un objeto DAO.

Aquí está el código anterior con ligeros cambios que lo hacen correr como medio segundo

 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); 

También puede crear un nuevo Runnable que haga todas las inserciones se ejecuta dentro de la función 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); } } }); 

Un excelente artículo sobre la aceleración de SQLITE insertar operaciones para Android se da aquí. Tryout esto podría optimizar la velocidad de los módulos de sincronización dramáticamente de 1.2 horas a 14 minutos en la sincronización DB de 39MB.

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

Avísame en caso de que necesites spinnets de código.

Intenté abajo mencionado y conseguí el mejor funcionamiento

  DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db-name", null); SQLiteDatabase dbGreen= helper.getWritableDatabase(); dbGreen.beginTransaction(); //Perform your insertion here dbGreen.setTransactionSuccessful(); dbGreen.endTransaction(); 
  • GreenDao soporta restricciones únicas en múltiples columnas
  • GreenDao getter para entidades relacionadas devuelve lista vacía
  • usando la daga para inyectar la base de datos junto con el gcm que recuperará datos de la base de datos
  • Cómo implementar herencia de tabla en GreenDao
  • Adición de código personalizado a entidades greenDAO
  • Android - Observer DB cambia con GreenDao ORM
  • Android GreenDao - Sólo elimina objetos en caché de una entidad específica
  • Greendao eliminar de db y sesión
  • Generación de esquema greenDAO con ruta de salida relativa; Fallando con i / o no encontrado
  • Verde DAO vs ORM lite vs Android activo
  • GreenDAO groupby cláusula
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.