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/M071Process.cs |   42 +++++++++++++++++++++++++++---------------
 1 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 155f253..a382503 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -207,10 +207,18 @@
             MachineState = MachineState.Running;
             OnMeasureStart?.Invoke();
 
-            var measurements = Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().DeepSerializeClone();
-            measurements.ForEach(m =>
+            //var measurements = Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().DeepSerializeClone();
+            //measurements.ForEach(m =>
+            //{
+            //    m.InitialKeyUnitMeasureChanged();
+            //});
+
+            List<MeasurementUnit> measurements = new List<MeasurementUnit>();
+            Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().ForEach(u =>
             {
+                var m = u.Copy();
                 m.InitialKeyUnitMeasureChanged();
+                measurements.Add(m);
             });
 
             var pMeasure = new ProductionMeasurement()
@@ -219,6 +227,8 @@
                 Measurements = measurements,
                 StartTime = DateTime.Now,
             };
+
+            BarCode = "";
 
             var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode);
             if (existedProduction != null)
@@ -283,8 +293,9 @@
                       RunImageHandle(s.CameraOp.OpConfig, set, s.Id, s.Name, pMeasure.Measurements);
                   });
 
-            BarCode = "";
             LogAsync(DateTime.Now, $"{pMeasure.Barcode}娴嬮噺鍔ㄤ綔瀹屾垚", "");
+            
+            GC.Collect(0, GCCollectionMode.Optimized);
 
             return new ProcessResponse(true);
         }
@@ -452,6 +463,7 @@
 
                 productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode);
                 pMeasure.Dispose();
+                //LogAsync(DateTime.Now, $"{pMeasure.Barcode}浜у搧淇℃伅閲婃斁瀹屾垚", JsonConvert.SerializeObject(pMeasure));
             }
         }
 
@@ -729,8 +741,6 @@
 
                         #region RawData
                         {
-                            //rawDataSheet = package.Workbook.Worksheets["RawData"];
-
                             int rowDataStartCol = rawDataSheet.Dimension.Columns;
                             var barcodeCell = rawDataSheet.Cells[1, rowDataStartCol + 1, 1, rowDataStartCol + 4];
                             barcodeCell.Merge = true;
@@ -776,12 +786,7 @@
                         if (slantMeasures.Count > 0)
                         {
                             int slantStartCol = slantSheet.Dimension.Columns;
-
-                            //var barcodeCell = slantSheet.Cells[1, slantStartCol + 1, 1, slantStartCol + 2];
-                            //barcodeCell.Merge = true;
-                            //barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode;
-                            //SetTitleCell(barcodeCell);
-
+                            
                             var barcodeCell = slantSheet.Cells[1, slantStartCol + 1];
                             barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode;
                             SetTitleCell(barcodeCell);
@@ -789,10 +794,6 @@
                             var valueCell = slantSheet.Cells[2, slantStartCol + 1];
                             valueCell.Value = "Value";
                             SetTitleCell(valueCell);
-
-                            //var resultCell = slantSheet.Cells[2, slantStartCol + 2];
-                            //resultCell.Value = "Result";
-                            //SetTitleCell(resultCell);
 
                             slantMeasures.ForEach(m =>
                             {
@@ -937,6 +938,11 @@
                         #endregion
 
                         package.Save();
+
+                        rawDataSheet.Dispose();
+                        slantSheet.Dispose();
+                        alignmentSheet.Dispose();
+                        rowAlignmentSheet.Dispose();
                     };
                 }
             });
@@ -1191,11 +1197,17 @@
                     });
 
                     image.Dispose();
+                    image = null;
                 }
                 //);
 
                 imgSet.HImage.Dispose();
+                imgSet.HImage = null;
+                imgSet.Dispose();
+
                 images.Dispose();
+                images = null;
+
                 //if (count.I != 1)
                 //{
                 //    hImage?.Dispose();

--
Gitblit v1.8.0