在之前做的视频监控系统项目中,我遇到的最大的问题就是解码器执行效率问题,因为视频处理数据量大,而且越是清晰的视频对解码器性能的要求越高,记得当时开始使用的是ffmpeg移植到VC++下的版本,用Debug调试的时候性能非常差,完全不能满足要求。现在想想,当时为什么不用Release试试呢?
之所以有这样的想法源于两个地方,今天看《C++对象模型》的时候作者提到“如果没有把优化开关打开,就很难猜测一个程序的效率表现............’” 还有一个是,昨天在实现对大量格式化数据进行关键字查重的时候,由于不同环境下的几次运行,效率各有千秋(同一段程序)
具体表现如下(处理150M数据)
环境+编译选项 运行时间
VS 下 Debug模式 60s+
VS 下release模式 8.7s
Linux 无优化G++ 10s+
Linux -o2 G++ 8.1s
这也就是引发我回忆的原因,我因为之前的项目经验,导致我觉得VC++是个很废柴的编译器,但这次我需要改变看法了。大家如果在VC++下开发过,必然觉得VC的调试功能实在是过于好了,我目前觉得调试最爽的IDE,debug模式需要编译器完全变量查看,执行中断等等操作,需要设置许多的编译选项,所以编译的程序其实是加入过多杂物的庞然大物。执行起来自然不如意,只是很少人会想到,之间的差距居然如此之大。这个数据虽然我记不清楚准确的值,但我也十分震惊。 虽然我可以认为VC++不再那么废柴,但确定的一点是:G++编译器的表现还是优于VC++的。不管在Windows还是Linux。
总结:如果你没有开启所有优化之前,千万不要轻易对程序性能进行判断。一切需要付诸实践!