Ich habe ein Problem beim Schließen meiner Datenbank, bevor versucht wird, die Datei zu löschen. Der Code ist gerecht
myconnection.Close();
File.Delete(filename);
Und das Löschen löst eine Ausnahme aus, dass die Datei noch verwendet wird. Ich habe Delete () im Debugger nach einigen Minuten erneut ausprobiert, es handelt sich also nicht um ein Timing-Problem.
Ich habe einen Transaktionscode, der jedoch vor dem Aufruf von Close () überhaupt nicht ausgeführt wird. Ich bin mir also ziemlich sicher, dass es sich nicht um eine offene Transaktion handelt. Die SQL-Befehle zwischen Öffnen und Schließen sind nur Auswahlen.
ProcMon zeigt mein Programm und mein Antivirenprogramm in der Datenbankdatei. Es zeigt nicht, dass mein Programm die Datenbankdatei nach dem Schließen () freigibt.
Visual Studio 2010, C #, System.Data.SQLite Version 1.0.77.0, Win7
Ich habe einen zwei Jahre alten Fehler wie diesen gesehen, aber das Changelog sagt, dass er behoben ist.
Kann ich noch etwas überprüfen? Gibt es eine Möglichkeit, eine Liste offener Befehle oder Transaktionen abzurufen?
Neuer Arbeitscode:
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()
, finden Sie diese Ausgabe für Details.