/// <summary> /// /// </summary> /// <param name="data"></param> public void RequestManualToCompress(ManualHisDataMemoryBlock data) { foreach (var vv in mTargetMemorys) { if (data.Id >= vv.Value.Id * TagCountOneFile && data.Id < (vv.Value.Id + 1) * TagCountOneFile) { vv.Value.AddManualToCompress(data); } } }
/// <summary> /// /// </summary> /// <param name="data"></param> private void Compress(ManualHisDataMemoryBlock data) { var cdata = CompressBlockMemory(data); cdata.MakeMemoryBusy(); ServiceLocator.Locator.Resolve <IDataSerialize3>().ManualRequestToSeriseFile(cdata); data.MakeMemoryNoBusy(); HisDataMemoryQueryService3.Service.ClearManualMemoryTime(data.Id, data.Time); ManualHisDataMemoryBlockPool.Pool.Release(data); }
/// <summary> /// /// </summary> /// <param name="data"></param> /// <returns></returns> private MarshalMemoryBlock CompressBlockMemory(ManualHisDataMemoryBlock data) { MarshalMemoryBlock block = MarshalMemoryBlockPool.Pool.Get(data.Length * 2 + 28 + 5 + 56); var histag = mHisTagService.GetHisTag(data.Id); if (histag == null) { return(null); } int datasize = 0; var targetPosition = 28 + 56; //前56个字节用于统计数据存放 block.WriteInt(56, data.Id); block.WriteDatetime(56 + 4, data.Time); //时间 block.WriteDatetime(56 + 12, data.EndTime); //结束时间 //block.WriteInt(20, 0); //写入数据大小 block.WriteInt(56 + 24, mTagIds.Count);//写入变量的个数 var qulityoffset = data.QualityAddress; var comtype = histag.CompressType;//压缩类型 block.WriteByte(targetPosition + 4, (byte)comtype); var tp = mCompressCach[comtype]; if (tp != null) { tp.QulityOffset = (int)qulityoffset; tp.TagType = histag.TagType; tp.RecordType = histag.Type; tp.StartTime = data.Time; tp.Parameters = histag.Parameters; tp.Precision = histag.Precision; tp.TimeTick = data.TimeUnit; tp.Id = data.Id; var size = tp.Compress(data, 0, block, targetPosition + 5, data.Length, block, 0) + 1; block.WriteInt(targetPosition, (int)size); datasize = (int)(targetPosition + size + 5); block.WriteInt(56 + 20, datasize); //写入数据大小 } return(block); }
/// <summary> /// /// </summary> /// <param name="data"></param> public void AddManualToCompress(ManualHisDataMemoryBlock data) { lock (mMemoryCach) mMemoryCach.Enqueue(data); }