2009-05-17 14 views

Respuesta

8

Puedo recomendar el uso de FMDB como un buen contenedor Cocoa SQLite.

+0

¿Está seguro de que no tiene pérdida de memoria, es seguro de usar, etc.? Ciertamente no es completo y aparentemente no es compatible. Digo, vaya con CoreData y ajuste el rendimiento cuando (si) empeora – melfar

+0

Al revisar mis aplicaciones por filtraciones, nunca encontré ninguna dentro de la biblioteca. – pgb

+0

Este podría ser un mejor enlace http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb –

6

De la parte superior de mi cabeza:

  • utiliza transacciones.
  • Asegúrese de que su SQL aprovecha tablas en el correct order.
  • No agregue índices que no esté completamente seguro de que necesita.

Quizás no solo sea específico para iPhone, sino para dispositivos integrados, hay algunos consejos excelentes here.

Esta link pertenece a una versión anterior de SQLite, pero aún así resulta útil.

Por último, este Stack Question también tiene una buena información.

Usamos SQLite con una aplicación .Net Compact Framework actualmente y su rendimiento es fantástico y hemos dedicado un poco de tiempo a optimizarlo, pero no tanto como pudimos.

Lo mejor de la suerte.

8

Mide la huella de memoria de tu aplicación y busca fugas en los instrumentos. A continuación, intente después de invocar sqlite3_exec con:

  • pragma cache_size=1

y/o

  • pragma synchronous=0

tu caso es distinto. Hay informes de aumentos de rendimiento, grandes reducciones en el uso de RAM y menos fugas. Sin embargo, tenga cuidado al realizar ajustes sin comprender el impacto (por ejemplo, synchronous apaga el enjuague, lo que acelera mucho las cosas, pero puede dañar la base de datos si el teléfono se enciende y apaga en el momento equivocado).

Más aquí: http://www.sqlite.org/pragma.html

+1

+1 para esto el tamaño_de_caché puede consumir bastante memoria en el iphone y me tomó un tiempo antes de encontrar esto. – paulthenerd

3

que he encontrado que a menudo es más rápido para obtener sólo las identificaciones que estoy buscando en una consulta compleja y luego el resto de la información sobre la demanda.

Así, por ejemplo:

SELECT person_id 
    FROM persons 
WHERE (complex where clause) 

y luego como se está mostrando cada persona que va a correr

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

Me suelen encontrar esto hace que el complejo de gestión de consulta en el tiempo y medio las búsquedas para una persona dada son típicamente del orden de 2 ms (esto es en tablas con 17k filas).

Su experiencia puede variar y usted debe cronometrar las cosas usted mismo.

Además, tengo que dar crédito a Wil Shipley por sugerir esta técnica en su charla aquí: http://www.vimeo.com/4421498.

De hecho, utilizo el patrón de hidratación/deshidratación extensamente de los sqlitebooks, que es un superconjunto de esta técnica.

1

soy perezoso y me gusta pegar en el código del núcleo tanto como sea posible, por lo tanto, me gustan los SQLitePersistentObjects herramienta ORM:

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

haces tus objetos del modelo de dominio heredan de SQLitePersistentObject (bien un poco intrusivo) y luego puede persistir/recuperar sus objetos según sea necesario.

a persistir:

[person save]; 

cargarlo de nuevo en es casi tan fácil. Cualquier objeto persistente obtiene métodos dinámicos de clase agregados para permitirle buscar. Por lo tanto, podríamos recuperar todos los objetos Persona que tenían un apellido "Smith", así:

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

Una otra opción que no han probado todavía es Core Data (necesidad de ser un iPhone Dev Apple), aunque su una característica 3.0 y lo que depende de su aplicación si eso es una opción ..

+0

Todas las presentaciones de aplicaciones actuales requieren ser compiladas con el SDK 3.0, entonces yo diría que Core Data es probablemente la mejor opción. –

+0

Según tengo entendido, la presentación no necesita ser compilada con 3.0, simplemente se probará en su contra: "todas las presentaciones en la App Store serán revisadas en la última versión beta de iPhone OS 3.0. Si el envío de su aplicación no es compatible con iPhone OS 3.0, no será aprobado. " –