问题类别
这次出问题的地方是数据链表的内存管理
错误现象
在我的人脸识别前端没有连上后端的时候,我的前端内存疯涨。
找到的错误原因
我的数据链表没有做抛弃处理,每新来个数据都新建一个数据结构,然后等到处理完再删除。这就产生一个问题,如果后端不处理我的数据,我的前端内存将会一直涨。
找错误过程
因为我是第一次写一个完整的前端,没想到我的前端设计引起了这么大的问题,最开始我不知道是什么原因,初步定位是新申请内存空间,然后没有进行删除导致。利用书上学到的知识,我可以对新申请的对象进行计数,大概如下:
struct str_video_pic
{
static int str_video_pic_num;
str_video_pic(){
str_video_pic_num++;
cout << "str_video_pic_num个数:"<<str_video_pic_num << endl;
}
~str_video_pic(){
str_video_pic_num--;
}
cv::Mat video_pic; //注册图片
std::vector<cv::Rect> rects;
};
每次新建一个对象,就输出一次当前类对象的个数,因为我的操作里面不涉及结构体赋值,所以没有重载’=’。
后面发现虽然我在最后把所有的对象都进行了删除,可类对象技术还是一直在涨,最后想到可能是虽然一直在往链表里面添加,可却没有对其经行处理,设置最大链表长度解决问题。
经验总结
对于实时性要求比较强的项目,需要设置一个最大链表长度,以免在后端没有处理的情况下,前端内存一直堆积。
可以利用公司已经定义好的链表结构,就不用重复造轮子了。