c#调用halcon视觉处理,内存泄漏,内存无法释放的解决方法之一

开发环境:windows7-64位,VisualStudio2013-C#,halcon12-64位

用C#调用同事用Halcon12写的图片处理程序时,内存一直增加,无法释放。halcon每次处理4张图片,每张图片10M,每次调用之后,内存就增加40M无法释放。在C#中将能释放的图像资源全部释放后,问题仍然得不到解决。

最终查出为halcon12不会自动释放不再使用的内存,需要手动释放。

gen_measure_rectangle2 (param[0]+Index*20, param[1], 0, 300, 20, Width, Height, 'nearest_neighbor', MeasureHandle)

gen_rectangle2 (Rectangle1, param[0]+Index*20, param[1], 0, 200, 20)

measure_pos (image, MeasureHandle, 1, param[2], param[3], param[4], RowEdge, ColumnEdge, Amplitude, Distance)

if(|RowEdge|>0)

    row:=[row,RowEdge]

    col:=[col,ColumnEdge] 

    gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 36, 0.785398)

    concat_obj (okregion, Cross, okregion)

endif

close_measure (MeasureHandle)

以上代码为halcon12中的代码,注意划横线的两行,及红色变量。最后调用close_measure方法释放内存。即算子调用结束,一定要配合close_measure方法释放内存,否则容易出现内存泄漏问题。

其他例如:read_ocr_class_mlp 一定要配合clear_ocr_class_mlp

read_ocr_class_mlp ('Document.omc', OCRHandle)
do_ocr_multi_class_mlp (Characters, ImageReduced, OCRHandle, X, Confidence)
clear_ocr_class_mlp(OCRHandle)


以上内存泄漏问题,在halcon16中没有发生,即没有手动释放,也没有发生内存泄漏

2018-11-29

 

你可能感兴趣的:(C#)