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.M071.Process/M071Models.cs |   52 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs
index a56f47c..2e9b2db 100644
--- a/src/Bro.M071.Process/M071Models.cs
+++ b/src/Bro.M071.Process/M071Models.cs
@@ -257,7 +257,7 @@
         {
             Measurements?.ForEach(m => m?.Dispose());
             Measurements = null;
-
+            ElementList = null;
             Barcode = null;
             GC.Collect();
         }
@@ -342,6 +342,39 @@
         {
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("KeyUnitCollection"));
         }
+
+        public MeasurementUnit Copy()
+        {
+            MeasurementUnit mUnit = new MeasurementUnit();
+
+            mUnit.Id = this.Id;
+            mUnit.Name = this.Name;
+            mUnit.IsEnabled = this.IsEnabled;
+            mUnit.MeasureType = this.MeasureType;
+
+            mUnit.DisplayLocation = new Rectangle(this.DisplayLocation.Location, this.DisplayLocation.Size);
+
+            if (this.Spec == null)
+            {
+                mUnit.Spec = null;
+            }
+            else
+            {
+                mUnit.Spec = new MeasureType();
+                mUnit.Spec.Code = this.Spec.Code;
+                mUnit.Spec.AlgorithemPath = this.Spec.AlgorithemPath;
+                mUnit.Spec.StandardValue = this.Spec.StandardValue;
+                mUnit.Spec.Tolrenance_Positive = this.Spec.Tolrenance_Positive;
+                mUnit.Spec.Tolrenance_Negative = this.Spec.Tolrenance_Negative;
+            }
+
+            this.KeyUnitCollection.ForEach(k =>
+            {
+                mUnit.KeyUnitCollection.Add(k.Copy());
+            });
+
+            return mUnit;
+        }
     }
 
     public class KeyUnitBind : IComplexDisplay, INotifyPropertyChanged, IDisposable
@@ -391,10 +424,9 @@
 
         public void Dispose()
         {
-            SpinWait wait = new SpinWait();
             while (ImageSaveStatus != 0)
             {
-                wait.SpinOnce();
+                Thread.Sleep(10);
             }
 
             KeyImages?.ForEach(i =>
@@ -437,6 +469,20 @@
                 }
             }
         }
+
+        public KeyUnitBind Copy()
+        {
+            KeyUnitBind clone = new KeyUnitBind();
+            clone.Key = this.Key;
+            clone.KeyResultId = this.KeyResultId;
+
+            this.MeasureValueDict.Keys.ToList().ForEach(k =>
+            {
+                clone.MeasureValueDict[k] = null;
+            });
+
+            return clone;
+        }
     }
 
     //public class NoticedDictionary<T1, T2> : Dictionary<T1, T2>, INotifyPropertyChanged

--
Gitblit v1.8.0