From eafdcc5ad6a55d3dfdec6c4787c3f3a9f32efc7f Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期二, 29 九月 2020 13:27:50 +0800 Subject: [PATCH] 1. M071B机台配置 2. GTS板卡添加回原点捕获模式和输入信号模式 3. CameraBase使用Dictionary类型做图片缓存 4. M071流程显式Copy,原来是为了避免内存泄漏,但目前来看不是这方面原因 5. Gocator驱动添加GoDataSet之类KObject资源显式回收,怀疑其中也有非托管对象资源,测试确实起到内存回收作用 --- src/Bro.Common.Device/DeviceBase/CameraBase.cs | 44 ++++++++++++++++++++------------------------ 1 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs index 82b529d..85b5458 100644 --- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs +++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs @@ -155,7 +155,7 @@ set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + _imageSetList[set.Id] = set; } /// <summary> @@ -175,7 +175,8 @@ #endregion #region 鍥剧墖缂撳瓨/淇濆瓨 - public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); + //public readonly ConcurrentBag<IImageSet> _imageSetList = new ConcurrentBag<IImageSet>(); + protected Dictionary<string, IImageSet> _imageSetList = new Dictionary<string, IImageSet>(); public void NewImageSet(IImageSet set) { @@ -183,7 +184,7 @@ set.IsFitSaved = !set.ImageSaveOption.IsSaveFitImage; set.IsAddtionalSaved = string.IsNullOrWhiteSpace(set.ImageSaveOption.AddtionalSaveType); set.OnImageSetTimeout += ImageSet_OnImageSetTimeout; - _imageSetList.Add(set); + _imageSetList[set.Id] = set; } //public virtual async void UpdateFitElements(List<IShapeElement> eleList, string imgSetId) @@ -201,7 +202,7 @@ OnImageUpdated?.Invoke(this, showImage, imgSetId); }); - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -236,7 +237,7 @@ if (eleList.Count > 0) OnElementsUpdated?.BeginInvoke(this, eleList, imgSetId, null, null); - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -300,7 +301,7 @@ { await Task.Run(() => { - IImageSet set = _imageSetList.FirstOrDefault(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set == null) return; @@ -366,7 +367,7 @@ //private Timer clearImageSetTimer = null; - public void ClearImageSet(IImageSet set) + public virtual void ClearImageSet(IImageSet set) { try { @@ -375,9 +376,8 @@ // && (!set.ImageSaveOption.IsSaveNGImage || set.IsNGSaved)) if (set.IsOriginSaved && set.IsFitSaved && set.IsAddtionalSaved) { - _imageSetList.TryTake(out set); - set.Dispose(); - //LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); + _imageSetList.Remove(set.Id); + LogAsync(DateTime.Now, $"绉婚櫎鍥剧墖淇℃伅锛屽綋鍓嶇紦瀛樻暟閲忥細{_imageSetList.Count}", ""); } //bool flag = false; @@ -397,7 +397,7 @@ public void ClearImageSet(string imgSetId) { - IImageSet set = _imageSetList.First(u => u.Id == imgSetId); + IImageSet set = _imageSetList[imgSetId]; if (set != null) ClearImageSet(set); } @@ -833,7 +833,7 @@ } } - public interface IImageSet : IDisposable + public interface IImageSet:IDisposable { DateTime InitialTime { get; set; } string Id { get; } @@ -897,26 +897,22 @@ public event Action<ImageSet> OnImageSetTimeout; private Timer autoDisposeTimer = null; - private void OnAutoDispose(object state) + public void Dispose(object state) { OnImageSetTimeout?.Invoke(this); - } - public ImageSet() - { - autoDisposeTimer = new Timer(OnAutoDispose, null, 10 * 1000, -1); + autoDisposeTimer.Change(-1, -1); + autoDisposeTimer.Dispose(); } public virtual void Dispose() { - autoDisposeTimer.Change(-1, -1); - autoDisposeTimer.Dispose(); + Dispose(null); + } - //Image?.Dispose(); - //Image = null; - - //HImage?.Dispose(); - //HImage = null; + public ImageSet() + { + autoDisposeTimer = new Timer(Dispose, null, 10 * 1000, -1); } #endregion } -- Gitblit v1.8.0