Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        /// <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();
        }