在C#中使用sqlite数据库时发现,删除了数据表或大量数据后,数据库的并不会变小。
这是因为数据库中删除大量数据后,会留下原来的数据空间(空闲数据页),数据库默认不会自动释放这些空间。可以通过"VACUUM"命令释放空间。
网上查到两种方法(手动/自动):
1、手动释放空间
先写一个执行sql语句的函数:
1 private void ExecuteSql(string sDbPath, string sqlStr) 2 { 3 using (SQLiteConnection conn = new SQLiteConnection("data source = " + sDbPath)) 4 { 5 using (SQLiteCommand cmd = new SQLiteCommand()) 6 { 7 cmd.Connection = conn; 8 9 conn.Open(); 10 cmd.CommandText = sqlStr; 11 cmd.ExecuteNonQuery(); 12 13 conn.Close(); 14 } 15 } 16 }
在删除数据表/大量数据后,调用上述函数(dbPath为数据库的地址)。
ExecuteSql(dbPath, "VACUUM");
2、设置数据库为自动释放空间
当数据库中无数据表时,设置其属性:
ExecuteSql(dbPath, "PRAGMA auto_vacuum = 1;");
测试了一下发现效果也挺好的。
比较两种方法,自动更方便。但是需要注意的是,在进行频繁的插入、更新、删除操作时,数据库会产生大量的内存碎片。自动释放空间的方法只能释放空闲数据页,但是并不会对内存碎片进行整理,在这个过程中反而会产生额外的内存碎片;而手动方式可以同时释放空闲空间和整理内存碎片。
时间: 2024-10-10 07:51:59