我如何等待真空完成?

时间:2015-03-07 13:23:47

标签: ios c sqlite vacuum

我正在构建一个由sqlite3数据库支持的缓存。为了限制使用的磁盘空间,我会定期检查db文件的大小。如果它超过我的最大限制,我批量删除最旧的项目和真空,重复直到大小低于最大值的80%。

但是,真空后文件大小没有立即改变,我通常会在大小减小之前删除整个表。所有来电都返回SQLITE_OK,没有任何错误可以在任何地方看到。

while (too_many_rows) {
    // delete N rows
    sqlite3_exec(database, "VACUUM;", NULL, NULL, &error);
    sqlite3_close(database);
    // check file size
    printf("%d deleted, new size %d KB\n", N, size);
}

产生类似的东西:

200 deleted, new size 400 KB
200 deleted, new size 400 KB
200 deleted, new size 360 KB
200 deleted, new size 360 KB
156 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 360 KB
0 deleted, new size 16 KB

如何判断真空吸尘器何时结束,我可以再次检查文件大小?

sqlite可以告诉我还是被阻止?我需要使用inotify还是其他什么?

0 个答案:

没有答案