慎用 Visual Studio对项目的转换功能

   今年二月,如今的这个项目进入到开发阶段,在前一个版本的基础上进行增量开发,是Windows下基于MFC开发的应用程序。svn

    前一个版本使用VS2003开发,如今已经不能知足咱们的需求,咱们决定在新版本中升级到VS2008。性能

    使咱们升级的缘由主要有这些:测试

  1. VS2003在调试时不支持直接查看STL各类数据容器中的元素(其实经过指针能够查看某个元素的值,但不能一次查看全部元素);
  2. 不支持并行构建,二十多万行代码,构建一次须要近半个小时;
  3. 须要支持Vista/Win7操做系统,VS2003没有对UAC的支持,且不能直接增长manifest文件;
  4. VS2008相对于VS2003其余的一些优化。

    升级的过程主要由VS2008的转换向导完成。按着提示的操做一步步下来,就能获得转换后的解决方案和工程文件。打开新的sln后构建,把有问题的地方改 掉,将老的lib及dll文件也使用VS2008从新编译,构建出来的软件能够正常运行,看上去一切正常。优化

    可是过了一段时间,测试人员发现Release版本的总体性能有大幅降低,几乎是原来的二分之一到三分之二。因为咱们的产品的定位是海量数据分析,因此性 能相当重要。我和另一名开发人员一块儿来分析这个问题的缘由,全部工程属性都是正确的,也查看了svn的提交记录,彷佛一切都没有问题。后来,咱们发现, 当前工程的编译器选项中对因而否优化设置的是"最大化速度/O2",可是改为"全局优化/Og"后性能反而有所提高。再查看原先的vcproj文件,发现 虽然设置的是"最大化速度/O2",可是在编译器的命令行中却没有"/O2"的选项。将编译器优化选项改成其余再改回"最大化速度/O2",能够看到编译 器命令行中增长了"/O2"选项。从新构建,性能恢复正常。操作系统

    问题产生的缘由,猜想应该是 VS2008转换VS2003的工程文件后丢失了优化选项,可是在工程属性页中错误的显示默认选项"最大化速度/O2"。命令行

    因此,VS提供的项目转换功能是不可靠的,建议将转换后的工程文件完整仔细的检查一遍。或者干脆不转换,从新创建一套工程文件,把原先的代码添加进来,重 新设置全部工程的属性。这样效率比较低,可是最保险。指针

相关文章
相关标签/搜索