我有一个定期运行的方法来优化我的应用程序的SQL Server Compact Edition(3.5)数据库.现有代码使用Shrink()方法:
SqlCeEngine engine = new SqlCeEngine(dbConnectionString); engine.Shrink();
今天我注意到还有一个Compact()方法.哪个更适合定期维护?
从SQL Server Compact团队博客:
这两者之间的差异与内部和外部内存碎片非常相似.
从SqlCeEngine.Shrink文档,通过将空的和未分配的页面移动到文件的末尾,然后截断文件,来回收数据库中浪费的空间.您可以通过在连接字符串中设置自动收缩阈值选项来将数据库配置为自动收缩.收缩不会创建临时数据库文件.
从SqlCeEngine.Compact文档,
通过从现有文件创建新数据库文件来回收数据库中浪费的空间.通过创建新的数据库手段,它可以回收行之间的可用空间.
为了更清楚,Shrink声称完全免费或未分配的页面; 其中,Compact也在页面中声称浪费了空间.因此,Compact需要创建一个新的数据库文件.