2011-10-27 12 views
7

Ho un modello CoreData che utilizza SQLite come archivio di persistenza. Devo inserire un numero elevato di righe dopo aver eseguito un po 'di elaborazione su ciascun record. C'è un modo per inviare i comandi a SQLiteinserimenti di massa con SQLite e CoreData

PRAGMA synchronous=OFF 
PRAGMA count_changes=OFF 
PRAGMA journal_mode=MEMORY 
PRAGMA temp_store=MEMORY 

ho bisogno di accelerare il tempo di elaborazione, come ci vogliono due ore per essere completato.

Eventuali suggerimenti saranno apprezzati.

Grazie

risposta

12

È possibile specificare le pragma quando si aggiunge il vostro negozio al coordinatore negozio:

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary]; 
[pragmaOptions setObject:@"OFF" forKey:@"synchronous"]; 
[pragmaOptions setObject:@"OFF" forKey:@"count_changes"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"journal_mode"]; 
[pragmaOptions setObject:@"MEMORY" forKey:@"temp_store"]; 
NSDictionary *storeOptions = 
    [NSDictionary dictionaryWithObject:pragmaOptions forKey:NSSQLitePragmasOption]; 
NSPersistentStore *store; 
NSError *error = nil; 
store = [psc addPersistentStoreWithType:NSSQLiteStoreType 
      configuration: nil 
      URL:url 
      options:storeOptions 
      error:&error]; 

(Adattato da Persistent Store Features)

vi consiglio caldamente di leggere anche "efficiente Importazione di dati" .

Documentazione correlata: NSSQLitePragmasOption Efficiently Importing Data

+0

grazie, hai salvato la pancetta con questa memoria journal_mode !!!! – SpaceDog

+0

È necessario essere consapevoli delle conseguenze della modalità di memoria: Se accade qualcosa di brutto (arresto anomalo, eccezione, interruzione forzata, ...) si perderanno i dati presenti nel giornale in memoria. Se questo è quello che vuoi: vai a farlo. –

+0

c'è una modalità journal_mode = OFF? – SpaceDog

Problemi correlati