在C#中使用Halcon算法find_shape_model时无法释放内存

时间:2017-10-24 02:20:16

标签: c# halcon

在C#中使用Halcon运算符 find_model_shape 时出现问题。 正如Halcon所说,即使使用clear_shape_model,也无法释放此运算符占用的内存。

当更复杂的形状搜索参数被设置为时,find_shape_model占用的内存似乎更大。

我只是想知道在使用此运算符后如何释放内存。

private void button1_Click(object sender, EventArgs e)
    {
        HTuple hv_ModelId = null;
        HTuple hv_ModelRow = null;
        HTuple hv_ModelColumn = null;
        HTuple hv_ModelAngle = null;
        HTuple hv_ModelScore = null;
        HObject ho_Image = null;


        HOperatorSet.GenEmptyObj(out ho_Image);
        ho_Image.Dispose();
        HOperatorSet.ReadImage(out ho_Image, "0.bmp");
        HOperatorSet.SetSystem("border_shape_models", "false");
        HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId);

        HOperatorSet.FindShapeModel(ho_Image, hv_ModelId, 0,
            3.14, 0.75, 0, 0.5, "least_squares", 6, 0.75, out hv_ModelRow,
            out hv_ModelColumn, out hv_ModelAngle, out hv_ModelScore);

        hv_ModelRow = null;
        hv_ModelColumn = null;
        hv_ModelAngle = null;
        hv_ModelScore = null;

        ho_Image.Dispose();
        HOperatorSet.ClearShapeModel(hv_ModelId);
        hv_ModelId = null;
    }

Memory before/after using find_shape_model

2 个答案:

答案 0 :(得分:3)

看起来您正在使用以下函数正确清除形状模型:

HOperatorSet.ClearShapeModel(hv_ModelId);

你确定内存没有发布吗? 如果在清除内存后再次读取相同的形状模型会发生什么?

HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId);

我会打赌内存不会受到影响。基本上如何管理内存也取决于您的操作系统。您的操作系统可能无法立即将内存提供给其他进程,因为它希望可以再次使用该内存。

出于好奇:您使用的操作系统以及如何在屏幕截图中生成图表?

答案 1 :(得分:0)

这似乎与此problem类似。

您尝试过吗?

GC.Collect(); GC.WaitForPendingFinalizers();