2012-05-17 3 views
2

Здравствуйте, я хотел бы знать, какой метод работает быстрее на Android.Что происходит быстрее на Android, SQLiteDatabase.Insert() или SQLiteDatabase.execSQL()?

У меня есть цикл, который обрабатывает тысячи строк, и я думаю, что на производительность влияет метод SQLiteDatabase.insert().

В методе ввода я поставил параметр с contentvalues, и я думаю, что в фоновом режиме метод должен иметь процесс для проверки каждого contentvalue и построения запроса.

Вместо этого в методе execSQL я поставил весь запрос в качестве параметра, и я думаю, что этот метод не должен делать этого, чтобы его выполнить.

Я не знаю, если я прав, я думаю, что execSQL лучше, чем вставка для большого количества данных, но я не уверен ...

ответ

1

Скорее всего, вы не увидите никакой разницы. Большую часть времени тратится на фактическую запись данных в базу данных, а генерация запросов - довольно простой шаг. Я рекомендую вам время вставки в обоих направлениях, если вы хотите увидеть разницу самостоятельно.

2

Ну, я пробовал это, и есть немного различия между ними ... execSQL быстрее, но это трудно заметить.

Однако, моя настоящая проблема заключалась в том, что я не использовал транзакции. Из-за того, что sqlite не имеет сервера для контроля доступа к данным, sqlite должен закрыть и снова открыть файл с файлами для каждой вставки, которую вы делаете. поэтому, если у вас есть тысяча вставок в цикле, и для нее нет транзакций, она будет совершать тысячу транзакций. В моем тесте тысяча вложений длилась 11 секунд без использования транзакции, а с транзакцией она длилась всего 1 секунду.

Смежные вопросы