我在尝试删除文件之前关闭数据库时遇到问题。代码只是
myconnection.Close();
File.Delete(filename);
并且Delete引发一个例外,表明该文件仍在使用中。几分钟后,我在调试器中重新尝试了Delete(),所以这不是时间问题。
我有交易代码,但是在Close()调用之前根本没有运行。因此,我相当确定这不是公开交易。打开和关闭之间的sql命令只是选择。
ProcMon显示我的程序和我的防病毒软件正在查看数据库文件。它没有显示我的程序在close()之后释放db文件。
Visual Studio 2010,C#,System.Data.SQLite版本1.0.77.0,Win7
我看到了一个类似两年的错误,但变更日志说它已修复。
还有什么我可以检查的吗?有没有办法获取任何打开的命令或事务的列表?
新的工作代码:
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);