之前一直在debug中跑图像处理的内容,总是处理速度非常不理想。不知道程序中有的步骤为什么那么耗时,明明可能只是比较简单的运算(个人觉得)。后来偶然看到有人说提速的方法之一就是变成release版,但由于自己在vs中opencv和cuda的配置乱七八糟。。并且opencv版本cmake的时候并没有选择其中world整体lib库打包的选项,那时候还不太明白怎么直接配置PropertiesSheet,感觉每次都要重新配置新项目的属性非常麻烦= =试了下失败了就放弃了。现在用新电脑装了新版本的vs2017和opencv4等,也自己明白了怎么鼓捣PropertiesSheet等,也打包了opencv的lib库,因此顺手就很快配置好了release版的环境,最终相同的程序提速达到了3-4倍,还是非常不错的。再结合网上看大佬们说的debug与release之间的差别,学习到了,摘下来看看:
debug调试,你在程序中设置了断点,为什么vs.net知道在那里要停下来,当你把鼠标移到某个变量上,vs.net就会显示它当时的值?因为编译器在代码中添加了许多调试需要的代码,可以让vs.net得到,返回给你。这些代码当然是要占用空间和时间的,在你的程序调试完了后,可以正确运行了。完全可以去掉这些代码,这时候就应该用Release模式了。
不管Debug还是Release模式,都要编译,都有中间临时代码产生,所以obj目录下有debug release目录。两种模式编译的结果,就放在bin目录下。编译完后,中间临时代码是没什么用的了,所以一般不管obj目录里的东西!
之间的区别就是,一个为调试版本,其中包括了出错时能够定位源代码的在行,如果源文件已经改变,定位出来会有偏移,而且,在这个版本中编译器不会进行代码优化,并且在程序中能用宏定义_DEBUG来确定当前的版本。另一个为正试版本,程序出错只是进行简单的错误处理,编译器会优化代码,以提高性能。
Release代码更小,执行更快,没有了调试信息。
简单来说,Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
还记得自己以前偶然看到CV_Assert()与Assert()功能基本相同,都是当括号中的表达式值为false,则返回一个错误信息,这个的缺点就是影响性能,debug之后可通过添加#include<stio.h>
#define NDEBUG
#include<assert.h>
来禁用Assert()
现在看来,看了debug和release之间的区别中有说在release中Assert是不会被编译的,这也是release优化代码的操作之一吧!