有没有办法限制 SQLite 的响应时间?
我有 SQL 请求,执行时间为 0 到 10 秒,具体取决于设备性能。此 SQL 是可选的。如果请求时间超过 3 秒,它应该被终止。如果我能先验地知道它需要超过 3 秒,我宁愿不要运行这个 SQL。
有没有办法限制 SQLite 的响应时间?
我有 SQL 请求,执行时间为 0 到 10 秒,具体取决于设备性能。此 SQL 是可选的。如果请求时间超过 3 秒,它应该被终止。如果我能先验地知道它需要超过 3 秒,我宁愿不要运行这个 SQL。
使用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);