public void Dispose() { try { if (Database != null) { Database.Close(); } Database = null; } catch { } try { if (_engine != null) { _engine.FreeLocks(); _engine = null; } } catch { } try { if (Connection != null) { Connection.Close(); } Connection = null; } catch { } }
//Статические члены //Закрывает базу public static void CloseDatabase(Database db) { try { db.Close(); } catch { } try { if (_engineStatic != null) { _engineStatic.FreeLocks(); _engineStatic = null; } } catch { } }
//Сжатие базы данных public static void Compress(string file, //файл базы int size, //размер а байтах, после которого нужно сжимать string tmpDir = null, //каталог временных фалов int timeout = 0) //время ожидания после сжатия в мс { if (file.IsEmpty()) { throw new NullReferenceException("Файл сжимаемой базы данных не может быть пустой строкой или null"); } var fdb = new FileInfo(file); if (fdb.Length < size) { return; } string sdir = fdb.Directory.FullName; if (tmpDir != null) { var dir = new DirectoryInfo(tmpDir); if (!dir.Exists) { dir.Create(); } sdir = tmpDir; } var ftmp = new FileInfo(sdir + @"\Tmp" + fdb.Name); if (ftmp.Exists) { ftmp.Delete(); } fdb.MoveTo(ftmp.FullName); new FileInfo(file).Delete(); var en = new DBEngine(); en.CompactDatabase(ftmp.FullName, file); en.FreeLocks(); en = null; GC.Collect(); if (timeout > 0) { Thread.Sleep(timeout); } }