有沒有辦法加速SQLite獲取? 我正在從我的SQLite數據庫中獲取數據到一個加載我的tableView的數組中。有沒有辦法加快SQLite獲取?
它正在圍繞10-20秒來填充所述陣列。有沒有更快的方法來做到這一點或什麼?也許只能一次加載每個單元格,至少用戶在加載其他單元格時看到一些單元格?
這裏是我的ViewController代碼: 代碼:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[NSThread detachNewThreadSelector:@selector(myThread:) toTarget:self withObject:nil];
}
-(void) myThread:(id) obj {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *array = [[Database sharedDatabase] getICD9DiseaseCodes];
[self performSelectorOnMainThread:@selector(dataDoneLoading:) withObject:array waitUntilDone:NO];
[pool release];
}
-(void) dataDoneLoading:(id) obj {
NSMutableArray *array = (NSMutableArray *) obj;
self.codeAray = array;
[self.myTableView reloadData];
}
下面是實際的代碼獲取: 代碼:
-(NSMutableArray *) getICD9ProcedureCodes
{
sqlite3 *database = CodesDatabase();
NSMutableArray *icd9ProcedureCodes = [[[NSMutableArray alloc] init] autorelease];
NSString *nsquery = [[NSString alloc] initWithFormat:@"SELECT code, title, description FROM icd9_procedure_codes"];
const char *query = [nsquery UTF8String];
[nsquery release];
sqlite3_stmt *statement;
int prepareCode = (sqlite3_prepare_v2(database, query, -1, &statement, NULL));
if(prepareCode == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW)
{
ICD9DiseaseCodes *code = [[ICD9DiseaseCodes alloc] init];
code.code = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 0) encoding:NSUTF8StringEncoding];
code.name = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
code.description = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
[icd9ProcedureCodes addObject:code];
[code release];
}
sqlite3_finalize(statement);
}
return icd9ProcedureCodes;
}
有多少行是在表中?你可能要考慮使用[NSFetchedResultsController](http://maniacdev.com/2010/01/core-data-nsfetchedresultscontroller/)。 –
大約有5000行。 – Jon
NSFetchedResultsController將處理只加載你需要的行。您將需要轉換爲使用CoreData來訪問sqlite數據庫。 –