ฉันมีปัญหาในการปิดฐานข้อมูลก่อนที่จะพยายามลบไฟล์ รหัสเป็นเพียง
myconnection.Close();
File.Delete(filename);
และลบแสดงข้อยกเว้นว่าไฟล์ยังคงใช้งานอยู่ ฉันได้ลองลบ () อีกครั้งในโปรแกรมดีบั๊กหลังจากนั้นไม่กี่นาทีดังนั้นจึงไม่ใช่ปัญหาเรื่องเวลา
ฉันมีรหัสธุรกรรม แต่ไม่ทำงานเลยก่อนการเรียกปิด () ดังนั้นฉันค่อนข้างแน่ใจว่าไม่ใช่ธุรกรรมที่เปิดอยู่ คำสั่ง sql ระหว่างเปิดและปิดเป็นเพียงการเลือก
ProcMon แสดงโปรแกรมของฉันและโปรแกรมป้องกันไวรัสของฉันกำลังดูไฟล์ฐานข้อมูล มันไม่แสดงโปรแกรมของฉันที่ปล่อยไฟล์ db หลังจากปิด ()
Visual Studio 2010, C #, System.Data.SQLite เวอร์ชัน 1.0.77.0, Win7.0
ฉันเห็นบั๊กอายุสองปีแบบนี้ แต่บันทึกการเปลี่ยนแปลงบอกว่าได้รับการแก้ไขแล้ว
มีอะไรให้ตรวจสอบอีกไหม? มีวิธีรับรายการคำสั่งหรือธุรกรรมที่เปิดอยู่หรือไม่?
ใหม่รหัสการทำงาน:
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);