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