由於.NET 中是讓垃圾收集器Garbage Collector (簡稱GC)刪除未使用的對象。但是,由於GC只是不時地刪除未使用的對象,因此同時使用的記憶體會增加。更重要的是,對於GC來說,HALCON 的標誌性變數(圖像、區域……)似乎相當“小”,因為它們只包含對(在許多情況下相當大)標誌性對象的 ...
由於.NET 中是讓垃圾收集器Garbage Collector (簡稱GC)刪除未使用的對象。但是,由於GC只是不時地刪除未使用的對象,因此同時使用的記憶體會增加。更重要的是,對於GC來說,HALCON 的標誌性變數(圖像、區域……)似乎相當“小”,因為它們只包含對(在許多情況下相當大)標誌性對象的引用資料庫。因此,GC可能不會釋放這些變數,即使它們不再被使用。因此,您可能需要強制刪除(未使用的)對象。有兩種方法可以做到這一點:
第一種方式:手動調用GC
比如每次處理運行後在計時器事件中完成:
private void Timer_Tick(object sender, System.EventArgs e) { Action(); GC.Collect(); GC.WaitForPendingFinalizers(); }
在托管 C++ 應用程式中調用GC的代碼是:
GC::Collect();
GC::WaitForPendingFinalizers();
第二種方式:通過調用Dispose()方法手動處理單個對象
HImage Image = new HImage("fuse"); ... Image.Dispose();
除了減少記憶體消耗,手動處理對象的另一個原因是釋放資源,例如,關閉與圖像採集設備或串列介面的連接。
如果要以確定的方式釋放引用的資源,則還需要釋放包含句柄的 HTuple實例。
請註意,HALCON 運算符總是為輸出參數和返回值創建一個新的對象實例(但不是在修改調用實例的“類構造函數”運算符調用中)。如果變數已經初始化,它的舊內容(以及為其分配的記憶體)仍然存在,直到GC將其刪除。如果你想手動刪除它,你必須在給它分配一個對象之前調用Dispose 。