2011-10-27 33 views
7

Tôi có một mô hình CoreData sử dụng SQLite làm lưu trữ lâu dài. Tôi cần phải chèn số lượng lớn các hàng sau khi thực hiện một số xử lý cho mỗi bản ghi. Có cách nào để gửi các lệnh đó đến SQLitechèn số lượng lớn với SQLite và CoreData

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

Tôi cần tăng tốc thời gian xử lý, mất vài giờ để hoàn thành.

Mọi gợi ý sẽ được đánh giá cao.

Cảm ơn

Trả lời

12

Bạn có thể chỉ định pragmas khi thêm cửa hàng của bạn để điều phối viên cửa hàng:

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]; 

(Phỏng theo Persistent Store Features)

Tôi đề nghị cũng phải đọc "hiệu quả Nhập dữ liệu" .

tài liệu liên quan: NSSQLitePragmasOption Efficiently Importing Data

+0

cảm ơn, bạn đã lưu bacon của tôi với bộ nhớ journal_mode này !!!! – SpaceDog

+0

Bạn nên biết các hậu quả mà chế độ bộ nhớ có: Nếu có điều gì đó xấu xảy ra (sụp đổ, ngoại lệ, buộc thoát, ...) bạn sẽ mất dữ liệu nằm trong nhật ký bộ nhớ. Nếu đây là những gì bạn muốn: Đi cho nó. –

+0

có chế độ journal_mode = OFF không? – SpaceDog

Các vấn đề liên quan