尝试优化我的应用程序数据库工作。
在数据库同步期间,我的应用程序在一个事务中运行一大包“删除”和“插入”命令。在事务“COMMIT”应用程序运行“VACUUM”命令之后。VACUUM 工作正常,但有时需要很多时间。所以我决定在并行线程中移动'VACUUM'执行。这里出了点问题。在其他线程中,我得到“数据库已锁定”。
我所做的:
1.COMMIT成功后关闭数据库。
2.使用“VACUUM”再次启动单独的打开和关闭数据库的方法。
在“COMMIT”的同一线程中,“VACUUM”工作正常,但在单独的线程中,相同的方法会出现“数据库已锁定”错误。我可以肯定地说,没有其他进程适用于封闭数据库,因为数据库同步是一个逻辑上独立的应用程序进程。
我做错了什么?
[connection closeDb];
[connection release];
if(!rollBackTransaction && commitSuccess){
// The commented code block doesn't work - "database is locked" error
// NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(runVacuumForDataBase:) object:_dbFileName];
// [thread start];
[self runVacuumForDataBase:_dbFileName]; // <-- This works fine
}