开发环境:Win7 VS2002 halcon12, 直接运行Debug的exe
不释放
private void butTemp_Click(object sender, EventArgs e)
{
HOperatorSet.SetSystem("clip_region", "false");
HObject region;
HOperatorSet.GenEmptyRegion(out region);
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 10000; j++)
{
HObject tmpRegion;
HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
HOperatorSet.Union2(tmpRegion, region, out region);
}
HTuple tArea, tmp;
HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
Debug.Assert(tArea > 0);
TestForm form = new TestForm();
form.ShowDialog();
}
不到一分钟运行结束,最多占用1G内存,运行结束占用800M内存。
释放tmpRegio
private void butTemp_Click(object sender, EventArgs e)
{
HOperatorSet.SetSystem("clip_region", "false");
HObject region;
HOperatorSet.GenEmptyRegion(out region);
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 10000; j++)
{
HObject tmpRegion;
HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
HOperatorSet.Union2(tmpRegion, region, out region);
tmpRegion.Dispose();
}
HTuple tArea, tmp;
HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
Debug.Assert(tArea > 0);
TestForm form = new TestForm();
form.ShowDialog();
}
不到一分钟运行结束,最多占用0.5G内存,运行结束占用0.5G 内存。
释放region
private void butTemp_Click(object sender, EventArgs e)
{
HOperatorSet.SetSystem("clip_region", "false");
HObject region;
HOperatorSet.GenEmptyRegion(out region);
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 10000; j++)
{
HObject tmpRegion;
HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
HOperatorSet.Union2(tmpRegion, region, out region);
tmpRegion.Dispose();
}
HTuple tArea, tmp;
HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
Debug.Assert(tArea > 0);
region.Dispose();
TestForm form = new TestForm();
form.ShowDialog();
}
几乎没变化,还是0.5G左右
释放bak
private void butTemp_Click(object sender, EventArgs e)
{
HOperatorSet.SetSystem("clip_region", "false");
HObject region;
HOperatorSet.GenEmptyRegion(out region);
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 10000; j++)
{
HObject tmpRegion;
HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
HObject bak = region;
HOperatorSet.Union2(tmpRegion, region, out region);
bak.Dispose();
tmpRegion.Dispose();
}
HTuple tArea, tmp;
HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
Debug.Assert(tArea > 0);
region.Dispose();
TestForm form = new TestForm();
form.ShowDialog();
}
不到一分钟运行结束,内存几乎没增加,不到20M以内。
结论
Union2的出参和入参一致时,必须手动释放,这样才能100% 马上回收内存。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~