2009-05-17 4 views

ответ

8

Я могу порекомендовать использовать FMDB в качестве прекрасной обертки Cocoa SQLite.

+0

Вы уверены, что это утечка памяти, безопасная в использовании и т. Д.? Это, конечно, не является полным и, по-видимому, неподдерживаемым. Я говорю, идите с CoreData и настройте производительность, когда (если) он становится плохим. – melfar

+0

Когда я просматриваю свои приложения для утечек, я никогда не нашел их в библиотеке. – pgb

+0

Это может быть лучшая ссылка http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb –

6

Off верхней части моей головы:

  • использовать транзакции.
  • Убедитесь, что ваш SQL использует таблицы в correct order.
  • Не добавляйте индексы, которые вы не совсем уверены в необходимости.

Возможно, не только для iPhone, но и для встроенных устройств есть несколько отличных подсказок here.

Этот link относится к старой версии SQLite, но при этом полезен.

Последнее, что Stack Question также имеет некоторую хорошую информацию.

В настоящее время мы используем SQLite с .Net Compact Framework Application, и его производительность фантастична, и мы потратили немного времени на оптимизацию, но не настолько, насколько могли.

Удачи.

8

Измерьте площадь памяти вашего приложения и найдите утечки в Инструментах. Затем попробуйте после вызова sqlite3_exec с:

  • pragma cache_size=1

и/или

  • pragma synchronous=0

YMMV. Появляются сообщения о повышении производительности, больших сокращениях использования ОЗУ и меньшем количестве утечек. Однако будьте осторожны при настройке без понимания воздействия (например, synchronous отключает промывку, что ускоряет работу, но может привести к повреждению БД, если телефон отключен в режиме питания в неподходящее время).

Подробнее здесь: http://www.sqlite.org/pragma.html

+1

+1 для этого cache_size может съесть довольно много памяти на iphone и Мне потребовалось некоторое время, прежде чем я нашел это. – paulthenerd

3

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

Так, например:

SELECT person_id 
    FROM persons 
WHERE (complex where clause) 

, а затем, как это отображается каждый человек, которого я побегу

SELECT first_name, last_name, birth_date, ... 
    FROM persons 
WHERE person_id = @person_id 

Я обычно нахожу это делает сложный запуск запроса в 1/2 времени и поиск для данного человека обычно составляет порядка 2 мс (это на таблицах с 17 тыс. строк).

Ваш опыт может отличаться, и вы должны самим заняться временем.

Кроме того, я должен отдать должное Вил Шипли за то, что предложил эту технику в его выступлении здесь: http://www.vimeo.com/4421498.

На самом деле я действительно использую шаблон гидратации/дегидратации из sqlitebooks, который является надмножеством этой техники.

1

Я ленивая и люблю придерживаться в основной код как можно больше, поэтому мне нравится ORM инструмент SQLitePersistentObjects:

http://code.google.com/p/sqlitepersistentobjects/

Вы делаете вашу модель домена объекты наследуют от SQLitePersistentObject (ок немного intrusive), а затем вы можете сохранять/извлекать свои объекты по мере необходимости.

Чтобы сохранить:

[person save]; 

Загрузка его обратно в почти так же легко. Любой устойчивый объект получает динамические методы класса, добавленные к нему, чтобы вы могли искать. Таким образом, мы могли бы получить все объекты Person, которые имели фамилию «Смит», как так:

NSArray *people = [PersistablePerson findByLastName:@"Smith"]; 
0

Еще один вариант я еще не пробовал это Core Data (нужно быть iphone DEV компании Apple), хотя его функция 3,0 и так это зависит от вашего приложения ли тот вариант ..

+0

Все текущие приложения должны быть построены с помощью SDK 3.0, поэтому я бы сказал, что Core Data - лучший вариант. –

+0

Как я понимаю, представление не обязательно должно быть построено с 3.0, оно просто будет протестировано против него: «все заявки в App Store будут рассмотрены на последней бета-версии iPhone OS 3.0. Если ваше приложение не является совместимый с iPhone OS 3.0, он не будет одобрен ». –

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