Выберите Flowable слишком медленно излучает в комнате - PullRequest
0 голосов
/ 23 июня 2018
@Entity(tableName = "items")
class Item {
  @PrimaryKey
  var id=0
  @ColumnInfo(name = "name")
  var name=""
  @ColumnInfo(name = "thumbnail")
  var thumbnail=""
}

@RawQuery(observedEntities = [Item::class])
fun select(query:SupportSQLiteQuery):Flowable<List<Item>>
@RawQuery(observedEntities = [Item::class])
fun selectCount(query: SupportSQLiteQuery):Int

//query example
//select id,name,thumbnail from items 
//where (name like '%ruby%' and name like '%diamond%') and 
//(thumbnail like '%lion%' and thumbnail like '%tiger%')

DB.getInstance().Dao().select(query)
           .concatMapIterable { it }
            .concatMap {
                //blabla...
            }

У selectCount очень короткое время оборота, но при выборе select он генерирует почти один элемент в секунду. (Где условия обеих функций одинаковы)

Даже когда я обращаюсь к одному и тому же запросу напрямую с помощью SQLiteOpenHelper, он измеряется в 10 раз быстрее, чем с помощью Room.

Есть ли что-то, что я упустил в улучшении скорости? Когда я создаю экземпляр базы данных, я использую следующие функции.

    fun getInstance(): DB {
        if (INSTANCE == null) {
            synchronized(DB::class) {
                INSTANCE = Room.databaseBuilder(
                        getContext(),
                        DB::class.java, 
                        "test.db")
                        .build()
            }
        }
        return INSTANCE!!
    }
...