【问题标题】:Memory cannot be released when using Halcon algorithm find_shape_model in C#在 C# 中使用 Halcon 算法 find_shape_model 时无法释放内存
【发布时间】:2018-04-04 16:48:17
【问题描述】:

在 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

【问题讨论】:

    标签: c# halcon


    【解决方案1】:

    这似乎类似于problem

    你试过了吗?

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

    【讨论】:

      【解决方案2】:

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

      HOperatorSet.ClearShapeModel(hv_ModelId);

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

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

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

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

      【讨论】:

      • 我使用的是Windows 10。截图中的图表来自Visual Studio的诊断工具。
      • 我同意你的观点,也许内存是由操作系统管理的。但是在这种情况下,我认为 halcon 在运行这个算子时应该更有可能需要更多的内存。我又做了一个测试,使用多个线程同时处理更多的图片,占用的内存有所增加。在我的测试中,1.1G可能是天花板。所以也许这个运营商只是需要更多的资源并且它有一个限制。
      • 我认为在我的项目中我必须使用更大的内存来保证健壮性。
      • 不确定这里是否有后续问题,但我相信 halcon 确实也做了一些它自己的内存管理。第一次调用某些函数/运算符时,它们的行为会有所不同。
      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 2013-07-30
      • 2019-04-21
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多