我有一个定期运行的方法来优化我的应用程序的SQL Server Compact Edition(3.5)数据库。现有代码使用Shrink()方法:
SqlCeEngine engine = new SqlCeEngine(dbConnectionString);
engine.Shrink();
今天我注意到还有一个Compact()方法。哪个更适合定期维护?
答案 0 :(得分:9)
来自SQL Server Compact Team Blog:
这两者之间的区别是 与内部和外部非常相似 内存碎片。
来自SqlCeEngine.Shrink文档,回收数据库中浪费的空间 通过移动空和未分配的页面 到文件的末尾,然后 截断文件。您可以 自动配置数据库 通过设置自动收缩来缩小 连接字符串中的阈值选项。 收缩不会造成暂时的影响 数据库文件。
来自SqlCeEngine.Compact文档,
回收数据库中浪费的空间 通过创建一个新的数据库文件 现有文件。通过创建一个新的 数据库的意思是,它回收了免费的 行之间的空间。
为了更清楚,Shrink声称 页面完全免费或 未分配的;契约声称 页面上浪费的空间也是如此。 因此Compact需要创建一个新的 数据库文件。