Intereting Posts
Collapsing ToolBar Layout всегда Colapse, если Show PopUp Пункт меню RecyclerView ERROR / веб-консоль: ошибка с нечистотой: слишком много времени, затрачиваемого на обработчик выгрузки Android: установка минимальной высоты представления программно Создание анализируемого запроса Джексона в Volley Работа эмулятора эмулятора не работает Может быть создан фрагмент только с одним экземпляром Facebook sdk, закодированный для android 2.2, не работает на android 4.0.4, показывая ошибку android.os.Networkonmainthread Передача строки из одной активности в другую активность в Android Как добавить текст в формате в текст? Android API21: VoiceInteractionService onReady () не вызывается Hello-jni NDK sample – ndk-build не работает Как обмениваться файлами cookie в пользовательских вкладках chrome android Как сделать все ионное приложение Android для работы в качестве фонового сервиса? Google Plus GoogleApiClient connect () без диалога выбора аккаунта Как просматривать Javascript-консоль браузера запаса в Android Galaxy S4

Проблема с Android sqlite / BLOB

С тех пор как я перевел свои данные из ArrayList в базу данных sqlite на Android, у меня серьезное падение производительности. Никаких курсоров не осталось открытым, что может привести к этому, поэтому я подозреваю, что проблема связана с изображениями, которые я храню в поле BLOB.

Приложение создает Карты , у которых есть поле cardBitmap, которое заполняется растровым изображением при создании.

Может ли кто-нибудь сказать мне по их опыту, какое решение более результативно:

  1. CardBitmap содержит ссылку (путь) к файлу на SD-карте, которая будет нарисована при создании. В базе данных хранится только путь.
  2. CardBitmap содержит объект ( BitmapFactory.decodeStream (imageStream, null, null) ), где imageStream считывается как ByteArrayInputStream из соответствующего поля базы данных.

Любые предложения будут полезны. Благодаря!

Ваше первое решение лучше , используйте файл с SD-карты и сохраните ссылочный путь в базе данных sqlite, что дает вам более высокую производительность, а также ваша база данных остается легкой.

У меня еще нет репутации, чтобы прокомментировать ответ, поэтому я добавлю 2cts вместо ответа, пожалуйста, простите меня.

Я искал ответ на аналогичный вопрос, и я не думаю, что текущий ответ удовлетворительный, потому что если вы спросите SQLite.org, они скажут вам, что это зависит от размера блоба и размера страницы.

Они сделали тест, а не на Android, но это показывает, что сохранение blob в SQLite быстрее для небольших капель (до 20 КБ), чем хранение в отдельных файлах. Тем не менее, для blobs больше 100 КБ, падение производительности велико, и лучше хранить капли в отдельных файлах, как вы (user370605). См. http://www.sqlite.org/intern-v-extern-blob.html.

Я рассмотрю вопрос, который не ответил на Android.

У меня недостаточно репутации, чтобы делать комментарии. Я добавляю этот ответ, чтобы помочь любому, кто все еще ищет какое-то предложение. После нескольких лет улучшения аппаратного обеспечения производительность этих двух решений мало чем отличается. Я несколько раз пробовал в своем Nexus 6p, записывая двоичный файл размером около 2 Мбайт для SQLite, в среднем занимает всего 50 мс. Несмотря на то, что внешнее хранилище будет работать лучше, текущая производительность может соответствовать моим ожиданиям. Запись на SQLite не требует разрешения WRITE_EXTERNAL_STORAGE, которое может быть отменено, если разрешение предоставлено из других приложений. В этом случае SQLite может быть хорошим выбором.