System.Data.SQLite Close()不释放数据库文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (72)

在试图删除该文件之前,我在关闭数据库时遇到了问题。代码只是

 myconnection.Close();    
 File.Delete(filename);

而Delete抛出一个异常,即该文件仍在使用中。几分钟后,我在调试器中重新尝试了Delete(),所以这不是时间问题。

我有事务代码,但它在Close()调用之前根本不运行。所以我很确定这不是一个公开的交易。OPEN和CLOSE之间的SQL命令只是选择。

ProcMon显示了我的程序和我的防病毒查看数据库文件。它没有显示我的程序在Close()之后释放db文件。

还有什么我可以查的吗?是否有方法获取任何打开的命令或事务的列表?

代码如下:
 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);
提问于
用户回答回答于

下面是示例代码:

string filename = "testFile.db";
SQLiteConnection connection = new SQLiteConnection("Data Source=" + filename + ";Version=3;");
connection.Close();
GC.Collect();
GC.WaitForPendingFinalizers();
File.Delete(filename);

用户回答回答于

只是GC.Collect()对我没用。

我不得不补充GC.WaitForPendingFinalizers()以便继续删除文件。

扫码关注云+社区