ios - Sqlite3 查询在 iOS 8.2 下变得非常慢

标签 ios sqlite ios8.2

我制作了一个可在应用程序内使用 sqlite 数据库的应用程序。在 iOS 8.2 之前它工作正常,但更新后查询方法的工作速度慢了大约 100(!!!) 倍。我试图找到有关此问题的信息,但我还没有找到任何信息。有人有同样的经历吗?这是我的方法,到目前为止效果很好。您是否看到其中有任何错误或优化可能性?

感谢您的帮助!

- (NSArray *)databaseContentWithQueryString:(NSString *)queryString {

NSDate *methodStart = [NSDate date];

NSMutableArray *retArray = [[NSMutableArray alloc] init];

sqlite3_stmt *statement;
if (sqlite3_prepare_v2(_database, [queryString UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
        int columnCount = sqlite3_column_count(statement);
        NSMutableArray *valueArray = [[NSMutableArray alloc] init];
        NSMutableArray *keyArray = [[NSMutableArray alloc] init];
        for (int i=0; i<columnCount; i++) {
            int type = sqlite3_column_type(statement, i);
            char *name = (char *) sqlite3_column_name(statement, i);
            [keyArray addObject:[NSString stringWithFormat:@"%s",name]];
            int intVal;
            char *charVal;
            if (type == SQLITE_INTEGER) {
                intVal = sqlite3_column_int(statement, i);
                [valueArray addObject:[NSNumber numberWithInt:intVal]];
            }
            if (type == SQLITE_TEXT) {
                charVal = (char *) sqlite3_column_text(statement, i);
                [valueArray addObject:[NSString stringWithUTF8String:charVal]];
            }
            if (type == SQLITE_NULL) {
                intVal = 0;
                [valueArray addObject:[NSNumber numberWithInt:intVal]];
            }
        }
        NSDictionary *dict = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray];
        [retArray addObject:dict];
    }
    sqlite3_finalize(statement);
}

//sqlite3_close(_database);

NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"executionTime = %f s", executionTime);

return retArray;

最佳答案

一些事情发生了变化:

这两项更改的组合可能是导致性能问题的原因。虽然 NGPQ 可能会提高许多复杂查询的性能,但它会对一些复杂查询产生负面影响,例如您的(和我的!)。

为了解决您的问题,我会检查您的特定查询,看看您是否缺少任何可以提高性能的索引。使用 EXPLAIN QUERY PLAN 可能会让您深入了解正在发生的事情。

  • 遗憾的是,除了这个 tweet,我找不到更好的 iOS 更改资源。以及一些技术论坛帖子的深度。

关于ios - Sqlite3 查询在 iOS 8.2 下变得非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29033730/

相关文章:

ios - 将 UIView 转换到 SKView 时线程 1 信号 SIGABRT 崩溃

sqlite - 何时在Sqlite中进行级联删除提交?

C - SQLite 绑定(bind)不工作

python - Django中QuerySet过滤器中的反向外键

ios - 当前位置图像的问题

ios - Twitter 库错误 : Undefined symbols for architecture x86_64:

android - 在 React Native 中的两个独立应用程序之间共享代码

ios - NSString在时间之前释放

sdk - 为什么 UIFont systemFontOfSize :weight not crash on iOS 8. 0?

ios - 多个 UIView 的动画与 UIBezierPath