慎用Visual Studio對專案的轉換功能

2022-08-16 17:09:10 字數 997 閱讀 8078

今年二月,現在的這個專案進入到開發階段,在前乙個版本的基礎上進行增量開發,是windows下基於mfc開發的應用程式。

前乙個版本使用vs2003開發,現在已經不能滿足我們的需求,我們決定在新版本中公升級到vs2008。

使我們公升級的原因主要有這些:

vs2003在除錯時不支援直接檢視stl各種資料容器中的元素(其實通過指標可以檢視某個元素的值,但不能一次檢視所有元素);

不支援並行構建,二十多萬行**,構建一次需要近半個小時;

需要支援vista/win7作業系統,vs2003沒有對uac的支援,且不能直接增加manifest檔案;

vs2008相對於vs2003其他的一些優化。

公升級的過程主要由vs2008的轉換嚮導完成。按著提示的操作一步步下來,就能得到轉換後的解決方案和工程檔案。開啟新的sln後構建,把有問題的地方改掉,將老的lib及dll檔案也使用vs2008重新編譯,構建出來的軟體可以正常執行,看上去一切正常。

但是過了一段時間,測試人員發現release版本的整體效能有大幅下降,幾乎是原來的二分之一到三分之二。由於我們的產品的定位是海量資料分析,所以效能至關重要。我和另外一名開發人員一起來分析這個問題的原因,所有工程屬性都是正確的,也檢視了svn的提交記錄,似乎一切都沒有問題。後來,我們發現,當前工程的編譯器選項中對於是否優化設定的是"最大化速度/o2",但是改成"全域性優化/og"後效能反而有所提公升。再檢視原先的vcproj檔案,發現雖然設定的是"最大化速度/o2",但是在編譯器的命令列中卻沒有"/o2"的選項。將編譯器優化選項改為其他再改回"最大化速度/o2",可以看到編譯器命令列中增加了"/o2"選項。重新構建,效能恢復正常。

問題產生的原因,猜測應該是 vs2008轉換vs2003的工程檔案後丟失了優化選項,但是在工程屬性頁中錯誤的顯示預設選項"最大化速度/o2"。

所以,vs提供的專案轉換功能是不可靠的,建議將轉換後的工程檔案完整仔細的檢查一遍。或者乾脆不轉換,重新建立一套工程檔案,把原先的**新增進來,重新設定所有工程的屬性。這樣效率比較低,但是最保險。

慎用for迴圈

1.for迴圈會在迴圈以外的scope建立乙個區域性變數,看下面 for i in 1,2,3 do p iend 123 p i 3這和each是有區別的,each只是會改變scope外面已存在的區域性變數 1,2,3 each do i print i endp i undefined loca...

慎用url重寫

為了使 url位址更加友好 當然可能有別的原因 很多站點使用了 url重寫,如http www.cnblogs.com life,在asp.net中通常要處理這樣的 url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framewor...

慎用url重寫

為了使url位址更加友好 當然可能有別的原因 很多站點使用了url重寫,如 http www.cnblogs.com life,在asp.net中通常要處理這樣的url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framework ...