有没有办法限制SQLite的响应时间?
我有SQL请求,执行时间从0到10秒取决于设备性能。这个SQL是可选的。如果请求超过3秒,则应终止。如果我知道apriori需要超过3秒,我宁愿不运行此SQL。
答案 0 :(得分: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);