public static bool Test(bool background) { var bakAddr = 0 - Math.Abs(DateTime.Now.Ticks); DDebug.DeleteDBFiles(1); DB server = new DB(1); server.SetBoxRecycler(new FileBackupBoxRecycler()); server.GetConfig().EnsureTable <DBObject>("DBObject", "ID"); DB.AutoBox auto = server.Open(); Parallel.For(0, 300, (i) => { var obj = new DBObject(); obj.ID = auto.NewId(0); obj.Value = "Value " + obj.ID; obj.DT = DateTime.Now; auto.Insert("DBObject", obj); }); // Export if (background) { Thread backupThread = new Thread(() => { ((FileBackupBoxRecycler)auto.GetDatabase().GetBoxRecycler()).Phase1(auto.GetDatabase(), bakAddr); }); backupThread.Start(); Parallel.For(0, 300, (i) => { var obj = new DBObject(); obj.ID = auto.NewId(0); obj.Value = "Value " + obj.ID; obj.DT = DateTime.Now; auto.Insert("DBObject", obj); }); backupThread.Join(); ((FileBackupBoxRecycler)auto.GetDatabase().GetBoxRecycler()).Phase2(); } else { ((FileBackupBoxRecycler)auto.GetDatabase().GetBoxRecycler()).Backup(auto.GetDatabase(), bakAddr); } //Import DB bakserver = new DB(bakAddr); bakserver.GetConfig().DBConfig.SwapFileBuffer = 0; DB.AutoBox bakauto = bakserver.Open(); DBObject[] s1 = auto.Select <DBObject>("from DBObject").ToArray(); DBObject[] s2 = bakauto.Select <DBObject>("from DBObject").ToArray(); server.Dispose(); bakserver.Dispose(); DDebug.DeleteDBFiles(bakAddr); return(s1.SequenceEqual(s2)); }