Почему Datastore медленнее, чем Shared Preferences

Я проверял время выполнения хранилища данных и общих предпочтений и заметил, что хранилище данных занимает больше времени, чем общие предпочтения.

это мой код

suspend fun saveUser(user: User, context: Context) {
            val userString =
                Json.encodeToString(User.serializer(), user)
            val time1 = System.nanoTime()
            context.dataStore.edit { preferences ->
                preferences[PreferencesKeys.USER] = userString
            }
            val time2 = System.nanoTime()
            with(userPref.edit()) {
                putString(HOME_USER_KEY, userString)
                apply()
            }
            val time3 = System.nanoTime()
            println("Time taken")
            println("Datastore : ${time2 - time1}")
            println("Shared Preferences : ${time3 - time2}")
        }

И вывод

I/System.out: Time taken
I/System.out: Datastore : 208257769
I/System.out: Shared Preferences : 14458539

I/System.out: Time taken
I/System.out: Datastore : 2892692
I/System.out: Shared Preferences : 246462

I/System.out: Time taken
I/System.out: Datastore : 3043770
I/System.out: Shared Preferences : 293846

I/System.out: Time taken
I/System.out: Datastore : 5548077
I/System.out: Shared Preferences : 321846

I/System.out: Time taken
I/System.out: Datastore : 2344076
I/System.out: Shared Preferences : 208616

Есть идеи, почему это может происходить?

3
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку хранилище данных имеет дополнительные слои потокобезопасность - в этом случае edit { } является функцией приостановки, которая переключает диспетчер "под капотом" и ждет, пока запись на диск не будет фактически завершена.

SharedPreferences apply этого не делает — он сохраняет изменения в памяти при запуске асинхронной записи на диск, которую вы не контролируете и не можете обрабатывать какие-либо ошибки.

Как вы думаете, появится ли что-то вроде apply в DataStore?

Orcun Sevsay 29.03.2022 14:27

@OrcunSevsay apply имеет кучу проблем, которые хранилище данных было создано, чтобы обойти их, так что я так не думаю. Чего бы вы хотели этим добиться?

Pawel 29.03.2022 15:09

Другие вопросы по теме