/// <summary> /// /// </summary> /// <param name="database"></param> public void ReLoad(string database) { string databasePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location), "Data"); if (System.IO.Directory.Exists(databasePath)) { foreach (var vv in System.IO.Directory.EnumerateDirectories(databasePath)) { string sname = new System.IO.DirectoryInfo(vv).Name; if (sname == database) { Cdy.Tag.Database db = new Cdy.Tag.DatabaseSerise().Load(sname); if (!mDatabase.ContainsKey(db.Name)) { mDatabase.Add(db.Name, db); } else { mDatabase[db.Name] = db; } break; } } } }
/// <summary> /// /// </summary> /// <param name="database"></param> public void Reload(string database) { if (mDatabase.ContainsKey(database)) { mDatabase.Remove(database); } Cdy.Tag.Database db = new Cdy.Tag.DatabaseSerise().Load(database); if (!mDatabase.ContainsKey(db.Name)) { mDatabase.Add(db.Name, db); } }
/// <summary> /// 重新加载数据库 /// </summary> public void ReStartDatabase() { bool ischanged = false; bool hischanged = false; bool issecuritychanged = false; LoggerService.Service.Info("ReStartDatabase", "开始重新热启动数据库", ConsoleColor.DarkYellow); Stopwatch sw = new Stopwatch(); sw.Start(); var db = new DatabaseSerise().LoadDifference(mDatabaseName, this.Database.RealDatabase, new Func <HisTag, bool>((tag) => { if (this.hisEnginer.Tags.ContainsKey(tag.Id)) { return(this.hisEnginer.Tags[tag.Id].EqualsTo(tag)); } else { return(false); } })); List <Tagbase> ltmp = new List <Tagbase>(); List <Tagbase> changedrealtag = new List <Tagbase>(); List <HisTag> htmp = new List <HisTag>(); List <HisTag> changedhistag = new List <HisTag>(); // foreach (var vv in db.RealDatabase.Tags) { if (mRealDatabase.Tags.ContainsKey(vv.Key)) { var tag = mRealDatabase.Tags[vv.Key]; if (tag.Type == vv.Value.Type) { changedrealtag.Add(vv.Value); ischanged = true; } } else { ltmp.Add(vv.Value); ischanged = true; } } // foreach (var vv in db.HisDatabase.HisTags) { if (this.hisEnginer.Tags.ContainsKey(vv.Key)) { var tag = this.hisEnginer.Tags[vv.Key]; if (tag.TagType == vv.Value.TagType) { changedhistag.Add(vv.Value); hischanged = true; } } else { htmp.Add(vv.Value); hischanged = true; } } LoggerService.Service.Info("ReStartDatabase", "加载 " + mDatabaseName + " 耗时: " + sw.ElapsedMilliseconds.ToString() + " ms"); compressEnginer.WaitForReady(); sw.Reset(); sw.Start(); var vids = htmp.Select(e => e.Id); compressEnginer.ReSizeTagCompress(vids); seriseEnginer.CheckAndAddSeriseFile(vids); //hisEnginer.Pause(); realEnginer.UpdateTags(changedrealtag); realEnginer.AddTags(ltmp); hisEnginer.AddTags(htmp); hisEnginer.UpdateTags(changedhistag); if (db.HisDatabase != null) { mHisDatabase.Setting = db.HisDatabase.Setting; } //hisEnginer.Resume(); // if (!mSecurityRunner.Document.Equals(db.Security)) { mSecurityRunner.Document = db.Security; issecuritychanged = true; } CurrentDatabaseVersion = db.Version; //CurrentDatabase = db.Name; CurrentDatabaseLastUpdateTime = mRealDatabase.UpdateTime; //RegistorInterface(); sw.Stop(); LoggerService.Service.Info("ReStartDatabase", "初始化数据库" + mDatabaseName + " 耗时: " + sw.ElapsedMilliseconds.ToString() + " ms"); NotifyDatabaseChanged(ischanged, hischanged, issecuritychanged); DriverManager.Manager.NotifyRealTagChanged(ltmp.ToDictionary(e => e.Id, e => e.LinkAddress), changedrealtag.ToDictionary(e => e.Id, e => e.LinkAddress)); DriverManager.Manager.NotifyHisTagChanged(htmp.Select(e => e.Id), changedhistag.Select(e => e.Id)); LoggerService.Service.Info("ReStartDatabase", "热启动数据库完成", ConsoleColor.DarkYellow); }