/// <summary> /// /// </summary> public void Stop() { mIsClosed = false; resetEvent.Set(); closedEvent.WaitOne(); mSourceMemory = null; mHisTagService = null; resetEvent.Dispose(); closedEvent.Dispose(); foreach (var vv in mTargetMemorys) { vv.Value.Dispose(); } mTargetMemorys.Clear(); }
/// <summary> /// 分配内存 /// </summary> private void AllocMemory() { /* * 数据块:数据块头+数据 * 数据块头:质量戳偏移+id * 数据:[时间戳]+[值]+[质量戳] */ long storeHeadSize = 0; long cachHeadSize = 0; int blockheadsize = 0; int qulityOffset = 0; int valueOffset = 0; Dictionary <int, Tuple <long, int, int, int> > addressoffset = new Dictionary <int, Tuple <long, int, int, int> >(); foreach (var vv in mHisTags) { var ss = CalMergeBlockSize(vv.Value.TagType, vv.Value.Type, blockheadsize, out valueOffset, out qulityOffset); addressoffset.Add(vv.Value.Id, new Tuple <long, int, int, int>(storeHeadSize, valueOffset, qulityOffset, ss)); storeHeadSize += ss; var css = CalCachDatablockSize(vv.Value.TagType, vv.Value.Type, blockheadsize, out valueOffset, out qulityOffset); vv.Value.BlockHeadStartAddr = cachHeadSize; vv.Value.TimerValueStartAddr = vv.Value.BlockHeadStartAddr; vv.Value.HisValueStartAddr = vv.Value.BlockHeadStartAddr + valueOffset; vv.Value.HisQulityStartAddr = vv.Value.BlockHeadStartAddr + qulityOffset; vv.Value.DataSize = css; cachHeadSize += css; //vv.Value.Init(); } mMergeMemory = new MergeMemoryBlock(storeHeadSize) { Name = "StoreMemory", TagAddress = addressoffset }; mCachMemory1 = new CachMemoryBlock(cachHeadSize) { Name = "CachMemory1" }; mCachMemory2 = new CachMemoryBlock(cachHeadSize) { Name = "CachMemory2" }; LoggerService.Service.Info("HisEnginer", "Cal MergeMemory memory size:" + (storeHeadSize / 1024.0 / 1024) + "M", ConsoleColor.Cyan); LoggerService.Service.Info("HisEnginer", "Cal CachMemoryBlock memory size:" + (cachHeadSize / 1024.0 / 1024 * 2) + "M", ConsoleColor.Cyan); CurrentMemory = mCachMemory1; mCachMemory1.Clear(); mCachMemory2.Clear(); mMergeMemory.Clear(); }