+ (BOOL) isExistingTicket:(NSString *)TicketID{
int numrows=0;
sqlite3 *database;
NSString *dbPath = [documentsDirectory stringByAppendingPathComponent:dbName];
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK)
{
NSString *sqlString = [NSString stringWithFormat:@"select count(*) from tickets WHERE ticket_id = '%@' LIMIT 1",TicketID];
sqlite3_stmt *selectStatement;
int returnValue = sqlite3_prepare_v2(database, [sqlString UTF8String], -1, &selectStatement, NULL);
if (returnValue == SQLITE_OK)
{
if(sqlite3_step(selectStatement) == SQLITE_ROW)
{
numrows= sqlite3_column_int(selectStatement, 0);
}
}
sqlite3_finalize(selectStatement);
}
else
sqlite3_close(database);
if (numrows > 0) {
return YES;
}else{
return NO;
}
}
大约200比较的数据集是在我的应用程序中使用此查询。当多次调用此函数时,应用程序内存使用量会不断增加。它消耗超过25Mb并且在此之后不会减少。为什么会这样?你能建议任何优化吗?
答案 0 :(得分:2)
此代码仅在sqlite3_open
调用失败时关闭数据库。
将sqlite3_close
调用移至if
的第一个分支。