码迷,mamicode.com
首页 > 数据库 > 详细

C#中如何解决sqlite数据表/记录删除后数据库内存不变的问题

时间:2016-08-08 22:50:53      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

在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;");

测试了一下发现效果也挺好的。

 

比较两种方法,自动更方便。但是需要注意的是,在进行频繁的插入、更新、删除操作时,数据库会产生大量的内存碎片。自动释放空间的方法只能释放空闲数据页,但是并不会对内存碎片进行整理,在这个过程中反而会产生额外的内存碎片;而手动方式可以同时释放空闲空间和整理内存碎片。

C#中如何解决sqlite数据表/记录删除后数据库内存不变的问题

标签:

原文地址:http://www.cnblogs.com/dengwx/p/5751177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!