iOS-5 for Sqlite的性能问题

Rup*_*esh 7 sqlite iphone performance objective-c ios5

我在iOS 5中使用sqlite 时遇到一个问题.我从两个表中获取记录:一个在Recipe中,另一个在一个Menu.db中的成分中

从食谱表我得到所有记录和一个recipeid在此基础上我从成分表中获取记录.在iOS 4.2上运行时,它不需要时间来获取记录,但是当我在iOS 5上运行时,需要时间来获取记录.请参阅以下代码:

NSString *query = [NSString stringWithFormat:@"select id from Recipes"];
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &selectstmt, NULL) == SQLITE_OK) {
    while(sqlite3_step(selectstmt) == SQLITE_ROW) {
        rcp.recipeID = sqlite3_column_int(selectstmt, 0);
        NSString *sql = [NSString stringWithFormat:@"select Name from Ingredients where recipeId = %d",rcp.recipeID];
        sqlite3_stmt *stmt2;
        if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt2, NULL) == SQLITE_OK) {
            while(sqlite3_step(stmt2) == SQLITE_ROW) {}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这个问题会出现在iOS 5.0中,相同的代码在iOS 4.0,4.2上运行良好?

我知道,我写的代码是对的,我想知道这个性能问题背后的确切原因在iOS 5.0 for Sqlite bcoz我的应用程序是完全围绕数据库构建的.

P.J*_*P.J 1

尝试使用两个不同的函数 完成第一个查询的执行后,开始第二个查询。

例如 :-

NSString *query = [NSString stringWithFormat:@"select id from Recipes"];
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &selectstmt, NULL) == SQLITE_OK) {
    while(sqlite3_step(selectstmt) == SQLITE_ROW) {
        rcp.recipeID = sqlite3_column_int(selectstmt, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话

 NSString *sql = [NSString stringWithFormat:@"select Name from Ingredients where recipeId = %d",rcp.recipeID];
            sqlite3_stmt *stmt2;
            if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt2, NULL) == SQLITE_OK) {
                while(sqlite3_step(stmt2) == SQLITE_ROW) {}
Run Code Online (Sandbox Code Playgroud)

希望这有助于解决您的问题。