在尝试删除文件之前,我关闭数据库时遇到了问题。 代码只是这样的
myconnection.Close();
File.Delete(filename);
执行Delete()方法时抛出了“文件仍在使用”的异常。我在调试器中等待几分钟后重新尝试了Delete()方法,因此这不是时间问题。
我有事务代码,但在Close()方法调用之前没有运行它。所以我相当确定它不是一个未关闭的事务。在Open()和Close()之间的SQL命令只是查询语句。
ProcMon显示我的程序和杀毒软件正在查看数据库文件。它没有显示我的程序在Close()方法之后释放数据库文件。
使用的工具为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);
SQLiteAsyncConnection.ResetPool()
,有关详细信息,请参见此问题。 - Uwe Keim