Я потратил довольно много времени на некоторые проблемы с производительностью на нашем устройстве и заметил, что у нас есть довольно много приложений, которые делают db-чтение/запись.Почему устарела InsertHelper?
Я начал с использования API контактов для вставки новых контактов & строк данных, и это было болезненно медленным. 1 минута 18 секунд, чтобы вставить около 1500 строк (250 необработанных контактов & 1250 строк данных).
Я использовал вспомогательную вставку в другом приложении для вставок производительности и решил написать тестовое приложение, которое будет писать для разделения db w/отдельные методы вставки.
В каждом db есть одна таблица, каждый w/4 столбца: _ID, Name, Time и Blob (все типы «строка») - точно так же, как поставщик контактов определяет столбцы данных.
_ID is auto increment pk, Name просто вставляет то же самое «1234567890», время - это только текущее системное время в milis, а BLOB - это строка длиной 6400, заполненная буквой «A» ...
я первый проверил массовой вставки, но все это делает петли через все вставки вы определили, и так же медленно, как делать вставки по отдельности (или пренебрежимо малое влияние на производительность) ..
я тестировал 3 различных методы для вставки: ContentValues w/db.insert метод: SQLiteStatement w/statement.execute() (выполняется внутри транзакции). SqliteInsertHelper с транзакцией.
Я могу предоставить код, но я получил максимальную производительность от InsertHelper, и интересно, почему она устарела:
Время для вставки 100 записей ContentValues: 7.778 секунды (82 байта написано/мс) SQLiteStatement: 1.311 секунд (489 байт в секрете/мс) SqliteInsertHElper: 0,92 секунды (2197 байт в сек./Мс)
Любые идеи?
Я сделал некоторые дополнительные испытания, и сделал очередную вставку, но сделал это часть сделки, это улучшило производительность значительно. Похоже, какой-то код, вероятно, необходим, чтобы уступить (глядя на поставщика контактов). – Chrispix
Учитывая указанную выше проблему производительности, транзакции были моим первым предложением (каждая транзакция требует ожиданий с обратной связью в оба конца, каждая вставка вне транзакции неявно завернута в одну). Прошлое, это может быть полезно прочитать: http://stackoverflow.com/questions/14344172/android-bulk-insert-when-inserthelper-is-deprecated – rutter
Я бы предложил также транзакции. Вставки, которые я тестировал с транзакциями, были довольно быстрыми. – Luis