开发者

Memory optimization for sqlite requests - help needed

I'm using two methods to r/w sqlite table:

+ (NSString *) getWeatherData:(int)rowID:(int)columnID {
    NSString *savedWeatherData = [[NSString alloc] init];
    if (sqlite3_open([[DBController getDBPath] UTF8String], &database) == SQLITE_OK) {

        const char *sql = "select * from TABLE where id=?";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            sqlite3_bind_int(selectstmt, 1, rowID);

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0); 
                Weather *weatherObj = [[Weather alloc] initWithPrimaryKey:primaryKey];

                weatherObj.weatherData = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, columnID)];
                savedWeatherData = weatherObj.weatherData;
                [weatherObj release];
            }

        }   
    }
    return [savedWeatherData autorelease];
}

And to save some data:

+ (void) saveDataToDataBase:(NSString *)columnToUpdate:(int)rowID:(NSString *)value {

    if (sqlite3_open([[DBController getDBPath] UTF8String], &database) == SQLITE_OK) {

        updateStmt = nil;

        NSString *sqlString = [[@"update TABLE set " stringByAppendingString:columnToUpdate] stringByAppendingString:@"=? where id=?"];

        const char *sql = [sqlString UTF8String];

        if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK) {
            NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
        } else { // select statement ok

            sqlite3_bind_text(updateStmt, 1, [value UTF8String], -1, SQLITE_TRANSIENT); // replace first ? with value
            sqlite3_bind_int(updateStmt, 2, rowID);                                     // replace second ? with rowID

            if(SQLITE_DONE != sqlite3_step(updateStmt)) {
                NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database));
            } else {
               // NSLog(@"Update completed !!!");  
            }

            sqlite3_reset(updateStmt);
        }

        sqlite3_fi开发者_Go百科nalize(updateStmt);

    }
    else
    sqlite3_close(database); //Even though the open call failed, close the database connection to release all the memory.

}

With the Instruments, I see pretty big memory consumption for sqlite. Info: during app startup, cca 100 different kind of data is stored in DB - for each data, this saveDataToDataBase method is called. (In case of no internet connection - getWeatherData would be used - and again cca 100 different kind of data would be read)

Please, can you instruct me - is it possible to optimize memory consumption.

Thanks a lot!

Kind regards!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜