2

当我在 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;
    }

使用 find_shape_model 之前/之后的内存

4

2 回答 2

3

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

HOperatorSet.ClearShapeModel(hv_ModelId);

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

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

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

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

于 2017-10-27T14:24:57.897 回答
0

这似乎类似于这个问题

你试过这个吗?

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

于 2020-02-04T13:24:06.440 回答