простая команда Delete () на sqlite занимает почти секунду? - PullRequest
1 голос
/ 13 января 2011

Вызов команды delete () в классе помощника базы данных вызывает задержку в пользовательском интерфейсе моего приложения для Android.Я сделал тест таймера и простую команду this.db.delete ("tonightSets", "id =" + item_id, null);требуется много времени, чтобы вернуться.Вот скорости, которые я получил для повторного выполнения одного и того же запроса (в миллисекундах) 1229мс 287мс 779мс 2604мс!817мс Почему это так медленно?В таблице всего 30 записей, а в каждой строке около десяти столбцов.Я выполняю гораздо более сложные функции множественного выбора и подсчета в одной таблице, которые возвращаются менее чем за 9 мс. Как я могу это исправить?Есть ли способ сделать это асинхронно, чтобы не создавать задержки в пользовательском интерфейсе?Большое спасибо

1 Ответ

2 голосов
/ 13 января 2011

Почему это так медленно?

Если вы используете это на устройстве, добро пожаловать на флэш-ввод-вывод. Флэш-ввод / вывод может быть очень медленным, в зависимости от того, что еще происходит с устройством. Большинство устройств Android используют файловую систему YAFFS2, которая использует глобальную блокировку разделов для однопоточного доступа к файловой системе. И флэш-записи еще медленнее из-за балансировки уровня износа и еще много чего.

Вам следует посмотреть презентацию Брэда Фицпатрика «Написание приложений для Android Zippy» с конференции Google I | O 2010 года. Там он указывает, что запись одного байта на флэш-память - хотя обычно очень быстрая - иногда может занять 200 мс.

Следовательно, общая рекомендация состоит в том, чтобы не выполнять флэш-ввод-вывод в основном потоке приложения.

Есть ли способ сделать это асинхронно, чтобы не создавать задержки в пользовательском интерфейсе?

Используйте AsyncTask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...