В чем разница между Shrink и Compact в SQL Server CE?

У меня есть метод, который периодически запускается для оптимизации базы данных SQL Server Compact Edition (3.5) моего приложения. Существующий код использует метод Shrink ():

        SqlCeEngine engine = new SqlCeEngine(dbConnectionString);
        engine.Shrink();

сегодня я заметил, что есть также метод Compact (). Что предпочтительнее для периодического обслуживания?

1 ответов


с блог команды SQL Server Compact:

разница между этими двумя, очень похож на внутренний и внешний Фрагментация Памяти.


От метода sqlceengine.Shrink документация

восстанавливает потерянное пространство в базе данных перемещая пустые и нераспределенные страницы до конца файла, а затем усечение файла. Вы можете автоматическая настройка базы данных сокращаться установив автосжатия параметр порога в строке подключения. Shrink не создает временное файл базы данных.

с метода sqlceengine.Компактный документация

восстанавливает потерянное пространство в базе данных путем создания нового файла базы данных из существующий файл. Путем создания нового база данных означает, что она восстанавливает свободную пространство между рядами.


Чтобы быть более ясным, Shrink утверждает, что страницы, которые полностью свободный или нераспределенные; где as, Compact claims пустое место на странице тоже. Следовательно, Compact требует создания нового файл базы данных.