sqlite3_enable_shared_cache и sqlite_backup_init замедляют выполнение на iPhone - PullRequest
0 голосов
/ 10 мая 2009

В моем приложении для iPhone выполняются некоторые относительно сложные запросы sqlite, а некоторые занимают слишком много времени (более 15 секунд). В базе данных всего около 430 записей. Одна вещь, которую я заметил, это то, что открытие нового соединения с базой данных (которое я делаю только один раз) и пошаговое выполнение результатов запроса (с sqlite3_step()) приводит к запуску sqlite3_backup_init() и sqlite3_enable_shared_cache(), что занимает 4450 мс и 3720 мс обработки соответственно время на протяжении всего периода испытаний. Я пытался использовать sqlite3_enable_shared_cache(0);, чтобы отключить совместное кэширование перед открытием соединения с базой данных, но, похоже, это не дает никакого эффекта.

Кто-нибудь знает, как отключить их, чтобы я мог получить какое-то улучшение скорости?

Ответы [ 2 ]

1 голос
/ 10 мая 2009

Ну, я полагаю, это не дает прямого ответа на вопрос, но частью проблемы было мое использование перекрестного соединения вместо левого соединения. Это сократило время запроса с 4000 мс до 60 мс. Кроме того, функция backup_init больше не вызывается и enable_shared_cache вращается не так сильно.

0 голосов
/ 07 июля 2009

Я исправил свое приложение, заменив внутреннее соединение левым соединением. Мои данные позволяют это. Если ваши данные не позволяют, рассмотрите возможность добавления предложения where

яблоки бананы внутреннего соединения b на b.id = a.id

против.

яблоки левые присоединяются к бананам b на b.id = a.id, где b.id не является нулевым

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