#android #performance #android-room
Вопрос:
У меня есть база данных комнат, и я пытаюсь прочитать из нее данные, при чтении 16 тысяч записей операция занимает 15 секунд. это мой код
@Entity(tableName = "reading_table")
data class DatabaseReading(
@PrimaryKey(autoGenerate = true)
val readingId: Int = 0,
val readingNum: Int,
val deviceId: String,
val readingTime: Long,
val topRh: Double,
val topTemp: Double,
val botRh: Double,
val botTemp: Double,
)
это мое ДАО
@Query("SELECT * FROM reading_table WHERE deviceId = :id ORDER BY readingTime ASC")
suspend fun getDeviceReadings(id: String): List<DatabaseReading>
затем из моей модели представления я выполняю запрос
fun getReadings() {
Timber.d("get readings start")
viewModelScope.launch {
withContext(Dispatchers.IO) {
val time = measureTimeMillis {
devicesRepository.database.deviceDatabaseDao.getDeviceReadings(
deviceID
)
}
Timber.d("get readings time $time")
}
}
}
Чтение занимает 15563 мс для 16155 записей.
как я могу это улучшить?
Ответ №1:
оказывается, проблема была вызвана плагином инспектора баз данных в Android studio. пока я им не пользуюсь, все работает нормально.
Ответ №2:
Я имею в виду, что для мобильного устройства, содержащего довольно значительное количество записей, скорее всего, вам не нужны и, вероятно, вы не будете использовать все 16 тысяч из них.
Вероятно, вам следует использовать библиотеку подкачки для помещения, чтобы загружать только фрагменты данных, а не все
Комментарии:
1. Мне нужно построить график из данных, поэтому мне нужно загрузить все, я нашел эту статью, и они проводят тесты для 50 тысяч строк, а значения намного меньше. medium.com/swlh/… еще одна странная вещь заключается в том, что вставка такого же объема данных занимает 1900 мс
2. Я не могу увидеть статью, так как она находится за платной стеной