在我的应用中,我需要多次插入一些条目。 每一次,我都在使用这个功能:
- (int) insertFunction:(NSString *)stringa{
NSDate * start = [NSDate date];
sqlite3_stmt *statement;
NSString *file = [self getWritableDBPath];
if (sqlite3_open([file UTF8String] , &_database) == SQLITE_OK)
{
NSString *insertSQL = [NSString stringWithFormat:@"%@",stringa];
const char *insert_stmt = [insertSQL UTF8String];
sqlite3_prepare_v2(_database, insert_stmt, -1, &statement, NULL);
if (sqlite3_step(statement) == SQLITE_DONE)
{
//NSLog(@"Contact added");
} else {
NSLog(@"Failed to add contact");
}
sqlite3_finalize(statement);
}
sqlite3_close(_database);
int row_id = (int)sqlite3_last_insert_rowid(_database);
NSLog(@"SINGLE INSERT took: %f", -[start timeIntervalSinceNow]);
return row_id;
}
花了大约0.020秒,让我的应用程序大约5秒钟。
-EDIT-我的getWritableDBPath是:
- (NSString *) getWritableDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:DATABASE_NAME];
}
我可以做些什么来改善这段时间?例如,每次都避免打开数据库?在这种情况下如何?
提前致谢
答案 0 :(得分:0)
您可能希望查看closeDatabase
调用,如果您使用的SQLite版本足够新,它可能会将您的写入放入WAL并将它们提交到主数据库中。虽然5秒看起来确实很慢。
关于让数据库保持打开状态的其他注释,只需调用open一次并保持一个类变量中的sqlite3 *句柄,然后在类被dealloc'ed时关闭它,你会看到更好的性能