C# 在C中使用Halcon算法查找_形状_模型时无法释放内存#

C# 在C中使用Halcon算法查找_形状_模型时无法释放内存#,c#,halcon,C#,Halcon,在C#中使用Halcon操作符时出现问题。 正如Halcon所说,即使使用clear_shape_模型,该操作符占用的内存也无法释放 当设置更复杂的形状搜索参数时,find_shape_模型占用的内存似乎更大 我只是想知道使用这个操作符后如何释放内存 private void button1_Click(object sender, EventArgs e) { HTuple hv_ModelId = null; HTuple hv_ModelRow =

在C#中使用Halcon操作符时出现问题。 正如Halcon所说,即使使用clear_shape_模型,该操作符占用的内存也无法释放

当设置更复杂的形状搜索参数时,find_shape_模型占用的内存似乎更大

我只是想知道使用这个操作符后如何释放内存

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;
    }

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

HOperatorSet.ClearShapeModel(hv_ModelId)

您确定内存没有释放吗? 如果清除内存后再次读取同一形状模型,会发生什么情况

HOperatorSet.ReadShapeModel(“0.shm”,输出hv\U模型ID)

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


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

这似乎与此类似

你试过这个吗

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

我正在使用Windows 10。屏幕截图中的图形来自VisualStudio的诊断工具。我同意你的说法,可能内存是由操作系统管理的。但在这种情况下,我认为halcon在运行这个操作符时需要更多内存的可能性更大。我做了另一个测试,使用多个线程同时处理更多的图片,占用的内存已经增加。在我的测试中,1.1G可能是上限。因此,可能这个操作符只需要更多的资源,它有一个限制。我认为在我的项目中,我必须使用更大的内存来保证健壮性。不确定这里是否有后续问题,但我相信halcon也做了一些自己的内存管理。第一次调用某些函数/运算符时,它们的行为会有所不同。