Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我的应用程序在iOS 5上出现了严重的性能问题,有人能帮我弄清楚这个来自仪器的速度测试日志吗?_Iphone_Performance_Testing_Ios5_Instruments - Fatal编程技术网

Iphone 我的应用程序在iOS 5上出现了严重的性能问题,有人能帮我弄清楚这个来自仪器的速度测试日志吗?

Iphone 我的应用程序在iOS 5上出现了严重的性能问题,有人能帮我弄清楚这个来自仪器的速度测试日志吗?,iphone,performance,testing,ios5,instruments,Iphone,Performance,Testing,Ios5,Instruments,我有一个简单的阅读应用程序,它使用fmdb与数据库对话,然后用文本填充UIWebview。自从ios 5的辉煌问世以来,它运行得非常糟糕 当我正在通过分段控制点击更改书中的章节时。在ios 4.3中,速度非常快。现在,正如您在下面看到的,它不是: 很明显,加载速度很慢,但我不知道如何读取速度测试的结果。哪种方法是罪魁祸首?我需要做什么来优化应用程序?我还能做些什么来了解这些障碍的确切位置吗 我在使用fmdb和ios 5时非常困难,因此我正在考虑其他选择。我应该放弃fmdb吗?选择直接ios sq

我有一个简单的阅读应用程序,它使用fmdb与数据库对话,然后用文本填充UIWebview。自从ios 5的辉煌问世以来,它运行得非常糟糕

当我正在通过分段控制点击更改书中的章节时。在ios 4.3中,速度非常快。现在,正如您在下面看到的,它不是:

很明显,加载速度很慢,但我不知道如何读取速度测试的结果。哪种方法是罪魁祸首?我需要做什么来优化应用程序?我还能做些什么来了解这些障碍的确切位置吗

我在使用fmdb和ios 5时非常困难,因此我正在考虑其他选择。我应该放弃fmdb吗?选择直接ios sqlite db方法

我发现仪器工具很有用,但很难理解和使用

更新

以下是更改章节方法:

- (IBAction) changeChapter:(id)sender {
if ([prevNext selectedSegmentIndex] == 0) {
    //previous
    [self setCurrentChapter:(currentChapter-1)];
} else {
    //next
    [self setCurrentChapter:(currentChapter+1)];
}
[self refreshUI];
}
更新2:

这是仪器告诉我的问题所在的代码。这是fmdb用于迭代FMResultSet的下一种方法:

- (BOOL) next {

int rc;
BOOL retry;
int numberOfRetries = 0;
do {
    retry = NO;

    rc = sqlite3_step(statement.statement); //Instruments says this is 100% the problem

    if (SQLITE_BUSY == rc) {
        // this will happen if the db is locked, like if we are doing an update or insert.
        // in that case, retry the step... and maybe wait just 10 milliseconds.
        retry = YES;
        usleep(20);

        if ([parentDB busyRetryTimeout] && (numberOfRetries++ > [parentDB busyRetryTimeout])) {

            NSLog(@"%s:%d Database busy (%@)", __FUNCTION__, __LINE__, [parentDB databasePath]);
            NSLog(@"Database busy");
            break;
        }
    }
    else if (SQLITE_DONE == rc || SQLITE_ROW == rc) {
        // all is well, let's return.
    }
    else if (SQLITE_ERROR == rc) {
        NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
        break;
    } 
    else if (SQLITE_MISUSE == rc) {
        // uh oh.
        NSLog(@"Error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
        break;
    }
    else {
        // wtf?
        NSLog(@"Unknown error calling sqlite3_step (%d: %s) rs", rc, sqlite3_errmsg([parentDB sqliteHandle]));
        break;
    }

} while (retry);


if (rc != SQLITE_ROW) {
    [self close];
}

return (rc == SQLITE_ROW);
}

就sqlite而言,FMDB是我所知道的一切,它值得吗?我是否应该放弃它,转而使用cocoa touch sqlite api?

好的,我实际上能够从FMDB邮件列表中的某个人那里获得此信息。他建议我在频繁调用的db表中添加一个索引,这就解决了这个问题

显然苹果改变了iOS 5中sqlite的版本

从FMDB帖子:

在sqlite中创建索引很容易——有关语法,请参见sqlite.org。 诀窍在于找出要创建的索引。 在我的例子中,我有一个类似的问题: 从x中选择a、b、c,其中sid=somevalue; sid不是表的主键,因此上没有索引 信息技术在sid上添加索引使查询速度大大加快,因为索引 允许它快速查找元组。请注意,索引可能会减慢速度 更新、插入和删除表,所以不要只是随机添加 表的索引。查看您的查询并查看列是什么
在查询的where子句中使用

看起来你40%的时间都在UIApplication sendEvent中。但这可能是因为您的changeChapter方法一次又一次地执行许多相同的操作,尽管无法准确地说出是什么操作-您实际执行的是PerformSelect还是编译器生成的?谢谢您的评论。看起来是由编译器生成的。在下一个章节方法过程中,我根本没有调用PerformSelect。您应该知道,虽然您已经删除了图像中的一些标识信息,但还没有删除所有信息。不管怎样,你最好使用实心条,你使用的线条不足以模糊文本。我直接使用sqlite也遇到了同样的问题,并且它在iOS 5中至少降低了一个数量级的性能。所以它不是FMDB。你能更精确一点吗?如何向常用表添加索引?再次感谢汉克斯:如果我错了,请纠正我,但这意味着您需要以某种方式管理您的查询,以便您知道要查找哪个索引,对吗?在我的例子中,我正在处理具有某种唯一整数标识符的数据——这也算作索引吗?