C#中使用Halcon算法find_shape_model无法释放内存
Memory cannot be released when using Halcon algorithm find_shape_model in C#
在 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
看起来您正在使用以下函数正确清除形状模型:
HOperatorSet.ClearShapeModel(hv_ModelId);
你确定内存没有释放?
如果清除内存后再次读取相同的形状模型会怎样?
HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId);
我敢打赌内存不会受到影响。基本上内存的管理方式也取决于你的OS。您的 OS 可能不会立即将内存提供给其他进程,因为它希望内存可以再次使用。
出于好奇:您使用的是哪个 OS 以及您的屏幕截图中的图形是如何生成的?
这似乎与此相似。
你试过这个吗?
GC.Collect();
GC.WaitForPendingFinalizers();
在 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
看起来您正在使用以下函数正确清除形状模型:
HOperatorSet.ClearShapeModel(hv_ModelId);
你确定内存没有释放? 如果清除内存后再次读取相同的形状模型会怎样?
HOperatorSet.ReadShapeModel("0.shm", out hv_ModelId);
我敢打赌内存不会受到影响。基本上内存的管理方式也取决于你的OS。您的 OS 可能不会立即将内存提供给其他进程,因为它希望内存可以再次使用。
出于好奇:您使用的是哪个 OS 以及您的屏幕截图中的图形是如何生成的?
这似乎与此相似
你试过这个吗?
GC.Collect();
GC.WaitForPendingFinalizers();