使用Read()函数为什么会导致内存一直增长

img

img


这我不清楚该如何释放内存?

img


添加了GC后可以稳定,但打包成一个EXE后就不起作用了,希望解决这个内存增长的问题
使用release不知道对不对

img


求解答


Mat caprs;
while (opengetimg) {
 caprs=new Mat();
 capture.Read(caprs);
 if (caprs.Empty()) {
 delete caprs;
 continue;
 }
 //...
 delete caprs;
}

不推荐赵4老师的做法去频繁的new和delete。
你的问题在于你没有释放掉capture。我不知道你的clearmemory()函数是干嘛用的,但是就你目前给出来的结果来看,你在退出循环之后,没有将VideoCapture释放掉,这回导致内存泄漏,而Mat本身并不需要你手动释放。
另外还有一点问题比较大的情况,你这里用图片来判断是不合理的,你应该使用cap.read的返回值来判断,应为你上一次的图片并没有清空,这回导致就算视频读取失败,或者视频结束了,但是你的Mat不为空,还是会进行下面的计算,而且你的外循环也一直都在,cap也没有释放,就会导致一直在读取空的视频,并且一直在处理你最后一帧图像。

img

我比较建议你看下下面的链接里面的操作,在csharp下面接口会有些变动,一般开头换成大写就行,没IDE有些我也不清楚应该改成什么接口,你自己看下。
https://blog.csdn.net/u010368556/article/details/79186992