zoukankan      html  css  js  c++  java
  • 引入OpenCV导致私有内存巨大

    引入OpenCV导致私有内存巨大

    说明

    在调试程序的时候 发现自己的程序在VS的调试窗口占用很高,
    花时间关注了一下这个问题, 手动写了小的程序复现这个问题,最终确定了占用巨大的问题.

    VS的调试工具表示的内存占用是统计的程序 私有字节 的大小, 而任务管理器统计的内存占用是程序的 工作集 大小,具体二者的内存的区别可以参考问题 Virtual Size causing program to run out of memory 的答案,

    1. Private bytes tells you how many bytes of virtual device memory your process has mapped, excluding virtual memory shared with other processes (e.g. mapped files, global heap, etc).
    2. Working set tells you how many bytes of physical memory you are actively using. This includes physical memory, device buffers, and mapped files. It's a pretty strange figure, since it equates to touched physical memory + mapped virtual non-system memory. In general, you should completely ignore this figure. It's practically useless for debugging memory leaks.
    3. Virtual bytes is the total amount of virtual memory you have mapped.

    解决

    通过不断的重复和二分, 最终确定了是 OpenCV引入的头文件问题, 在我们平时写OpenCV的程序的时候, 总是简单的使用 #include <opencv.hpp> 引入一个头文件来解决问题, 也是官方推荐的写法, 十分方便,

    但是巨大, 我们分别使用三种方式测试, 分别是

    1. 不引入 Opencv 头文件, WorkingSet: 31,636 KB, PrivateByte: 6,224 KB ; VS: 7 MB
      不引入opencv文件

    2. 引入 一个 Opencv.hpp 头文件, WorkingSet: 49,012 KB, PrivateByte: 999,068 KB VS:1 GB
      引入一个统一头文件

    3. 引入 一个 Opencv.hpp 头文件, WorkingSet: 31,700 KB, PrivateByte: 6,252 KB VS:7 MB
      引入相应的模块文件

    查看 opencv.hpp 文件里面的内容 最终通过二分排查, 确定了 只要引用 opencv2/dnn.hpp 之后,占用巨大, 本项目中不会用到这个头文件所以,这里可以不加入即可,问题解决!!

    // #include "opencv2/opencv_modules.hpp"
    //#include "opencv2/calib3d.hpp"
    //#include "opencv2/features2d.hpp"
    #include "opencv2/dnn.hpp"      // 最终确定占用巨大
    //#include "opencv2/flann.hpp"
    //#include "opencv2/highgui.hpp"
    //#include "opencv2/imgcodecs.hpp"
    //#include "opencv2/imgproc.hpp"
    //#include "opencv2/ml.hpp"
    //#include "opencv2/objdetect.hpp"
    //#include "opencv2/photo.hpp"
    //#include "opencv2/shape.hpp"
    //#include "opencv2/stitching.hpp"
    //#include "opencv2/superres.hpp"
    //#include "opencv2/video.hpp"
    //#include "opencv2/videoio.hpp"
    //#include "opencv2/videostab.hpp"

    更多

    图中程序部分是 VS2015 , 右侧进程管理查看软件是 ProcessExplorer_v16.21 可以查看进程的各种细节

    参考链接

  • 相关阅读:
    Python排序算法(一)——快速排序
    jupyter运行py文件(py文件和ipynb文件互转)
    Jupyter notebook工具栏隐藏和jupyter notebook主题更改
    Python中print和return的区别
    500 : Internal Server Error(jupyter)
    PEP8 python规范神器
    Python分析微信好友性别比例和省份城市分布比例
    xpath 的使用
    scrapy实验1 爬取中国人寿官网新闻,保存为xml
    数据可视化matplotlib、seaborn、pydotplus
  • 原文地址:https://www.cnblogs.com/hugochen1024/p/12570866.html
Copyright © 2011-2022 走看看