【发布时间】:2011-03-28 18:28:12
【问题描述】:
在我的 iphone 应用程序更新后,我需要加载一些配置数据。我将包含一堆 SQL 语句(800+)的文件捆绑在一个文件中,以便在首次启动时运行。看来我现在可能被画在角落里了。如果我在启动时在主线程上运行它,运行时间太长以至于应用程序由于启动时间过长而崩溃。如果我在单独的线程上运行它,我会收到数据库争用错误(库例程调用乱序)。我认为这是因为应用程序继续在主线程上加载和读取数据库。
这是从CSV文件接收数据然后循环并写入DB的方法。
关于如何使其在启动时运行得更快或在低优先级后台线程上成功运行而不争用的任何想法?
+ (void) updateDB:(NSString *)data {
NSArray *lineArray = [data componentsSeparatedByString:@"\n"];
if (sqlite3_open([[BIUtility getDBPath] UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
NSLog(@"Failed to opendatabase in updateDB");
}
char *errorMsg;
for(int k = 0; k < [lineArray count]; k++){
NSString *loadSQLi = [lineArray objectAtIndex:k];
if (sqlite3_exec(database, [loadSQLi UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
NSLog(@"DB Error. '%s'", sqlite3_errmsg(database));
}
}
if(database) sqlite3_close(database);
}
【问题讨论】:
标签: iphone objective-c multithreading sqlite