diff --git a/Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs b/Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs index c87a048ff2024ceca2b8681e801b019c3b034bf2..9a06c179d294959864bdc7c1ae0e18bca5e24cb9 100644 --- a/Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs +++ b/Common/Cdy.Tag.Common/Common/MarshalFixedMemoryBlock.cs @@ -268,7 +268,7 @@ namespace Cdy.Tag public void ReAlloc(long size) { Init(size); - GC.Collect(); + //GC.Collect(); } @@ -1232,7 +1232,7 @@ namespace Cdy.Tag { Marshal.FreeHGlobal(mHandles); LoggerService.Service.Erro("MarshalFixedMemoryBlock", Name +" Disposed " ); - GC.Collect(); + //GC.Collect(); } diff --git a/Common/Cdy.Tag.Common/Common/MarshalMemoryBlock.cs b/Common/Cdy.Tag.Common/Common/MarshalMemoryBlock.cs index 15290dbde25ef05b5152a8dc0e011c99bfc5bf56..24993e9c1fbc30cd13f615518e1f49bdc39b03b7 100644 --- a/Common/Cdy.Tag.Common/Common/MarshalMemoryBlock.cs +++ b/Common/Cdy.Tag.Common/Common/MarshalMemoryBlock.cs @@ -1840,14 +1840,17 @@ namespace Cdy.Tag public virtual void Dispose() { //mDataBuffer = null; - foreach(var vv in mHandles) + if (mHandles.Count > 0) { - Marshal.FreeHGlobal(vv); + foreach (var vv in mHandles) + { + Marshal.FreeHGlobal(vv); + } + mHandles.Clear(); } - mHandles.Clear(); - LoggerService.Service.Erro("MarshalMemoryBlock", Name +" Disposed " ); + // LoggerService.Service.Erro("MarshalMemoryBlock", Name +" Disposed " ); - GC.Collect(); + //GC.Collect(); } ///// diff --git a/Common/Cdy.Tag/Interface/IRealDataNotify.cs b/Common/Cdy.Tag/Interface/IRealDataNotify.cs index 7718817f6c0ff42a5a902c44f38b9b9dd28502e0..0aefd39bd9bd368f343f1ef1b93a88f34475de56 100644 --- a/Common/Cdy.Tag/Interface/IRealDataNotify.cs +++ b/Common/Cdy.Tag/Interface/IRealDataNotify.cs @@ -23,7 +23,7 @@ namespace Cdy.Tag /// /// /// - void SubscribeValueChangedForConsumer(string name, ValueChangedNotifyProcesser.ValueChangedDelegate valueChanged,ValueChangedNotifyProcesser.BlockChangedDelegate blockChanged, Func> tagRegistor); + void SubscribeValueChangedForConsumer(string name, ValueChangedNotifyProcesser.ValueChangedDelegate valueChanged,ValueChangedNotifyProcesser.BlockChangedDelegate blockChanged,Action BlockChangedNotify, Func> tagRegistor); /// /// 取消订购 diff --git a/Common/Cdy.Tag/Real/ValueChangedNotifyProcesser.cs b/Common/Cdy.Tag/Real/ValueChangedNotifyProcesser.cs index 2ddbc673b0bcb3934e2bd620e638ea19a4a633ff..e1f37b7030f03a3b9e9ab83e36314e53b69a3091 100644 --- a/Common/Cdy.Tag/Real/ValueChangedNotifyProcesser.cs +++ b/Common/Cdy.Tag/Real/ValueChangedNotifyProcesser.cs @@ -131,6 +131,12 @@ namespace Cdy.Tag /// /// public BlockChangedDelegate BlockChanged { get; set; } + + + /// + /// + /// + public Action BlockChangedNotify { get; set; } /// /// /// @@ -308,6 +314,7 @@ namespace Cdy.Tag } } } + BlockChangedNotify?.Invoke(); } Thread.Sleep(10); diff --git a/Proxy/DbInRunWebApi/Config/DbWebApiProxy.cfg b/Proxy/DbInRunWebApi/Config/DbWebApiProxy.cfg index b9e5f23ac1d5c72de9e11ade0bc05d6ebc651afa..bab075bf165a43aaee59d3530927d246c1398823 100644 --- a/Proxy/DbInRunWebApi/Config/DbWebApiProxy.cfg +++ b/Proxy/DbInRunWebApi/Config/DbWebApiProxy.cfg @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/Proxy/DbInRunWebApi/Properties/launchSettings.json b/Proxy/DbInRunWebApi/Properties/launchSettings.json index 1dbf0322ad8f7718f4918cc4077ab6669bb27c34..280f667fda88c08859f36099be2c9f5c1c5feed8 100644 --- a/Proxy/DbInRunWebApi/Properties/launchSettings.json +++ b/Proxy/DbInRunWebApi/Properties/launchSettings.json @@ -17,9 +17,8 @@ } }, "DbInRunWebApi": { - "commandName": "Executable", + "commandName": "Project", "launchBrowser": true, - "launchUrl": "weatherforecast", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, diff --git a/RunTime/DBHisData/HisQuery/DataFileManager.cs b/RunTime/DBHisData/HisQuery/DataFileManager.cs index cc5e0bdaeb2b3c7d0d23fa1f6695e0f6b9a0e37c..d0aefdb2e85ec76afd91b2bf6a9fa8b8d36f28d0 100644 --- a/RunTime/DBHisData/HisQuery/DataFileManager.cs +++ b/RunTime/DBHisData/HisQuery/DataFileManager.cs @@ -186,10 +186,11 @@ namespace Cdy.Tag } else if(e.ChangeType == System.IO.WatcherChangeTypes.Changed) { + LoggerService.Service.Info("DataFileMananger", "HisDataFile " + e.Name + " is changed & will be processed!", ConsoleColor.Cyan); + var vtmp = new System.IO.FileInfo(e.FullPath); lock (mLocker) { - LoggerService.Service.Info("DataFileMananger", "HisDataFile " + e.Name + " is changed & will be processed!", ConsoleColor.Cyan); - var vtmp = new System.IO.FileInfo(e.FullPath); + if (vtmp.Extension == DataFileExtends) { var vfile = CheckAndGetDataFile(e.Name); diff --git a/RunTime/DBHisData/HisQuery/TimeFile/DataFileInfo.cs b/RunTime/DBHisData/HisQuery/TimeFile/DataFileInfo.cs index 1f3ade6e2876f49f9307506eadec8dfab43e0a06..764ef2413a56df2c251bf7295297eb68496b1a90 100644 --- a/RunTime/DBHisData/HisQuery/TimeFile/DataFileInfo.cs +++ b/RunTime/DBHisData/HisQuery/TimeFile/DataFileInfo.cs @@ -25,7 +25,7 @@ namespace Cdy.Tag private bool mInited = false; - private object mLockObj = new object(); + private static object mLockObj = new object(); private DateTime mLastTime; @@ -1757,10 +1757,10 @@ namespace Cdy.Tag { DeCompressDataBlockAllValue(vv.Key, vv.Value.Item1, vv.Value.Item2, timetick, result); } - foreach(var vv in data) + foreach (var vv in data) { vv.Key.Dispose(); - + } data.Clear(); } diff --git a/RunTime/DBRuntime.Proxy/Driver/NetTransformDriver.cs b/RunTime/DBRuntime.Proxy/Driver/NetTransformDriver.cs index 305f311a8f194203a4b8221223f24f8aaa01334b..a2d33f10076afac2bb8af1080e49496bbdb6414d 100644 --- a/RunTime/DBRuntime.Proxy/Driver/NetTransformDriver.cs +++ b/RunTime/DBRuntime.Proxy/Driver/NetTransformDriver.cs @@ -103,6 +103,7 @@ namespace DBRuntime.Proxy resetEvent.WaitOne(); if (mIsClosed) break; resetEvent.Reset(); + int icount = mCachDatas.Count; while (mCachDatas.Count > 0) { // ProcessSingleBufferData(mCachDatas.Dequeue()); @@ -142,7 +143,6 @@ namespace DBRuntime.Proxy /// private void ProcessBlockBufferData(IByteBuffer block) { - var realenginer = (ServiceLocator.Locator.Resolve() as RealEnginer); var start = block.ReadInt(); var size = block.ReadInt(); @@ -150,6 +150,7 @@ namespace DBRuntime.Proxy Buffer.BlockCopy(block.Array, block.ArrayOffset + block.ReaderIndex, realenginer.Memory, start, size); block.SetReaderIndex(block.ReaderIndex + size); block.ReleaseBuffer(); + } /// diff --git a/RunTime/DBRuntime.Real/Real/RealEnginer.cs b/RunTime/DBRuntime.Real/Real/RealEnginer.cs index e09f58254ce9ff8d115290c91c1ac9c9ac830e16..59321bb421994379162439260756f64722dd45ca 100644 --- a/RunTime/DBRuntime.Real/Real/RealEnginer.cs +++ b/RunTime/DBRuntime.Real/Real/RealEnginer.cs @@ -3480,7 +3480,7 @@ namespace Cdy.Tag /// /// /// - public void SubscribeValueChangedForConsumer(string name, ValueChangedNotifyProcesser.ValueChangedDelegate valueChanged, ValueChangedNotifyProcesser.BlockChangedDelegate blockchanged, Func> tagRegistor) + public void SubscribeValueChangedForConsumer(string name, ValueChangedNotifyProcesser.ValueChangedDelegate valueChanged, ValueChangedNotifyProcesser.BlockChangedDelegate blockchanged,Action BlockChangedNotify, Func> tagRegistor) { var re = ComsumerValueChangedNotifyManager.Manager.GetNotifier(name); if (tagRegistor != null) @@ -3507,6 +3507,7 @@ namespace Cdy.Tag } re.ValueChanged = valueChanged; re.BlockChanged = blockchanged; + re.BlockChangedNotify = BlockChangedNotify; re.Start(); } diff --git a/RunTime/DBRuntime/Api/RealDataServerProcess.cs b/RunTime/DBRuntime/Api/RealDataServerProcess.cs index 3b69548e2c35cbaff2ec5202cf731b4224c52364..831d74aedc990fc06e14bbcf86455b1f7e38c884 100644 --- a/RunTime/DBRuntime/Api/RealDataServerProcess.cs +++ b/RunTime/DBRuntime/Api/RealDataServerProcess.cs @@ -122,12 +122,14 @@ namespace DBRuntime.Api { lock (mChangedBlocks) mChangedBlocks.Enqueue(bids); - - if (!mIsClosed) - resetEvent.Set(); } - }), new Func>(() => { return null; })); + }),()=> { + if (!mIsClosed) + { + resetEvent.Set(); + } + }, new Func>(() => { return null; })); } @@ -207,10 +209,14 @@ namespace DBRuntime.Api var cc = ServiceLocator.Locator.Resolve() as RealEnginer; if (start >= cc.Memory.Length) return; - var re = BufferManager.Manager.Allocate(ApiFunConst.RealDataRequestFun, size); - Buffer.BlockCopy(cc.Memory, start, re.Array, re.ArrayOffset + re.WriterIndex, size); - re.SetWriterIndex(re.WriterIndex + size); - Parent.AsyncCallback(clientId, re); + var re = BufferManager.Manager.Allocate(ApiFunConst.RealDataRequestFun, 0); + + + var ob = Unpooled.CompositeBuffer().AddComponents(true, re, Unpooled.WrappedBuffer(cc.Memory, start, size)); + //var re = BufferManager.Manager.Allocate(ApiFunConst.RealDataRequestFun, size); + //Buffer.BlockCopy(cc.Memory, start, re.Array, re.ArrayOffset + re.WriterIndex, size); + //re.SetWriterIndex(re.WriterIndex + size); + Parent.AsyncCallback(clientId, ob); } @@ -234,6 +240,28 @@ namespace DBRuntime.Api return re; } + private IByteBuffer GetBlockSendBuffer2(BlockItem item) + { + int start = item.StartAddress; + int size = item.EndAddress - start; + var cc = ServiceLocator.Locator.Resolve() as RealEnginer; + if (start >= cc.Memory.Length) return null; + + //var re = Unpooled.Buffer(10); + + //re.WriteByte(ApiFunConst.RealDataPushFun); + var re = BufferManager.Manager.Allocate(ApiFunConst.RealDataPushFun, 9); + re.WriteByte(RealDataBlockPush); + re.WriteInt(start); + re.WriteInt(size); + + return Unpooled.CompositeBuffer().AddComponents(true,re, Unpooled.WrappedBuffer(cc.Memory, start, size)); + + // Buffer.BlockCopy(cc.Memory, start, re.Array, re.ArrayOffset + re.WriterIndex, size); + // re.SetWriterIndex(re.WriterIndex + size); + // return re; + } + /// /// /// @@ -802,15 +830,15 @@ namespace DBRuntime.Api if(mBlockCallBackRegistorIds.Count>0) { - Stopwatch sw = new Stopwatch(); - sw.Start(); + //Stopwatch sw = new Stopwatch(); + //sw.Start(); int count = 0; while (mChangedBlocks.Count>0) { var vv = mChangedBlocks.Dequeue(); if (vv == null) continue; - var buffer = GetBlockSendBuffer(vv); + var buffer = GetBlockSendBuffer2(vv); foreach (var vvb in mBlockCallBackRegistorIds.ToArray()) { // buffer.Retain(); @@ -822,8 +850,8 @@ namespace DBRuntime.Api //buffer.ReleaseBuffer(); count++; } - sw.Stop(); - LoggerService.Service.Erro("RealDataServerProcess", "推送数据耗时"+sw.ElapsedMilliseconds+" 大小:"+ count); + //sw.Stop(); + //LoggerService.Service.Erro("RealDataServerProcess", "推送数据耗时"+sw.ElapsedMilliseconds+" 大小:"+ count); } else { diff --git a/RunTime/DBRuntime/His/ValueChangedMemoryCacheProcesser.cs b/RunTime/DBRuntime/His/ValueChangedMemoryCacheProcesser.cs index e6e073bca9287abc4806a3abccb30a39d250a318..04b465d6e340b62c4cf955624cdb1225e2a28955 100644 --- a/RunTime/DBRuntime/His/ValueChangedMemoryCacheProcesser.cs +++ b/RunTime/DBRuntime/His/ValueChangedMemoryCacheProcesser.cs @@ -115,7 +115,7 @@ namespace Cdy.Tag mChangedTags[vv] = true; } } - }),null, new Func>(() => { return mTags.Keys.ToList(); })); + }),null,null, new Func>(() => { return mTags.Keys.ToList(); })); mRecordThread = new Thread(ThreadProcess); mRecordThread.IsBackground=true;