在尝试删除文件之前,我在关闭数据库时遇到问题。代码就是这样
myconnection.Close();
File.Delete(filename);
并且Delete抛出了一个异常,即该文件仍在使用中。几分钟后我在调试器中重新尝试了Delete(),所以这不是时间问题。
我有事务代码,但在Close()调用之前它根本不运行。所以我很确定这不是一个开放的交易。打开和关闭之间的sql命令只是选择。
ProcMon显示我的程序和我的防病毒软件查看数据库文件。它没有显示我的程序在close()之后释放db文件。
Visual Studio 2010,C#,System.Data.SQLite版本1.0.77.0,Win7
我看到一个两岁的bug就像这样,但更新日志说它已修复。
还有什么我可以检查的吗?有没有办法获得任何打开的命令或事务的列表?
新的工作代码:
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);