0

有没有办法限制 SQLite 的响应时间?

我有 SQL 请求,执行时间为 0 到 10 秒,具体取决于设备性能。此 SQL 是可选的。如果请求时间超过 3 秒,它应该被终止。如果我能先验地知道它需要超过 3 秒,我宁愿不要运行这个 SQL。

4

1 回答 1

2

使用sqlite3_progress_handler接口注册回调函数。

正如@JeremyP 建议的那样,您可以传入一个指向 的指针NSDate,或者将其他存储时间的东西作为上下文进行比较。如果它达到某个阈值以上,则从使用此函数注册的回调中返回一个非零值以终止操作。

int progressHandler(void *context) {
    NSDate *start = (NSDate *)context;
    NSTimeInterval wait = -[start timeIntervalSinceNow];

    if (wait > 3.0) {
        return 1;
    } else {
        return 0;
    }
}

此函数的第二个参数是调用回调的频率。该值以执行的跳转操作码数为单位,并且会因机器而异。就上下文而言,在我的 Macbook 上,它每秒处理大约 2000 万个操作码。您的用例的一个不错的数字可能是 10K-100K。

sqlite3_progress_handler(db, 100000, &progressHandler, (void *)someDate);
于 2013-04-01T06:56:19.913 回答