小编Tom*_*rul的帖子

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

在尝试删除文件之前,我在关闭数据库时遇到问题.代码就是这样

 myconnection.Close();    
 File.Delete(filename);
Run Code Online (Sandbox Code Playgroud)

并且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);
Run Code Online (Sandbox Code Playgroud)

sqlite system.data.sqlite

82
推荐指数
9
解决办法
4万
查看次数

如何确定.EXE是否具有命令行选项?

假设您有一个.EXE,并且您想要检查它是否具有命令行选项.如何知道.EXE是否具备此功能.在我的情况下,我知道Nir Sofers WebBrowserPassView.exe能够通过cmd.exe和WebBrowserPassView.exe/stext output.txt启动它.但是我怎么能知道我不知道呢?

executable command-line exe command-line-arguments

46
推荐指数
4
解决办法
13万
查看次数