2011-11-17 55 views
-1

我們正在將項目從Visual Studio 6(我知道)遷移到Visual Studio 2010.我們遇到了很多問題,因爲Visual Studio爲我們做了轉換自動,所以我們不得不手動。在Visual Studio 2010下與Visual Studio 6.0相比,原生C++ .dll速度更慢6

這裏有兩個命令行選項:

2006 
/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "HCR_DLL_EXPORTS" /Fp"Release/hcr_dll.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 

2010 
/Zi /nologo /W4 /WX- /O2 /Oy- /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "HCR_DLL_EXPORTS" /D "_WINDLL" /Gm- /EHsc /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\hcr_dll.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /wd"4996" /analyze- /errorReport:queue 

我在選項中拍得上都this page。看來2010版本的編譯選項啓用了異常,而VC6版本不支持?也許這是原因?我們現在開始運行一些基準測試,但有很多組合需要嘗試,而且我們對這方面的經驗並不是很豐富,所以如果你能夠立即查看並理解原因,我會在天堂爲你買一杯啤酒。

編輯:我明白爲什麼有些人可能不喜歡這個問題。我們正在嘗試找出問題並提出一個具體的測試來展示其差異。這是一個巨大的遺留的.dll,所以我希望這可能是一個明顯的問題,通過查看編譯選項,有經驗的人會注意到。如果不是,我們將繼續努力解決問題。謝謝。

編輯2:我對這個問題的性質表示歉意,並同意它應該被關閉。我們嘲笑編譯選項,並提出了與VC6相比,我們的程序實際上加快了20%左右。我知道我應該公佈特定的代碼來證明這個基準,但是我們正處於緊縮狀態,所以我們只是要使用它而不是現在就看它。我希望有一段時間能夠回到這個問題上,但考慮到我們的時間表,我可能無法做到。對於任何有興趣的人,這些是我們現在使用的選項。

/Z7 /nologo /W4 /WX- /O2 /Oy- /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "HCR_DLL_EXPORTS" /D "_WINDLL" /Gm- /MD /GS- /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\hcr_dll.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /wd"4996" /analyze- /errorReport:queue 

這可能實際上並不會幫助任何人B/C,他們不知道什麼我們的計劃是做的想法,但我想我會仍然張貼。對不起,如果我已經讓任何人浪費了大量的時間。

+0

「慢」 是真的不夠說明去。 – tenfour

+0

向我們展示您在VS10中分析和演示的特定代碼塊比在VS6中慢。 –

+0

1998年(VS6)和2009年(VS2010)之間有很長的一段時間......當一切仍然有效時,它的速度會有所改變,這更令人驚訝。 – PlasmaHH

回答

3

根據您的意見,沒有基本的固有原因,爲什麼在VS10中編譯的代碼會比在VS6中編譯的代碼慢。總體來說,VS10比VS6要好得多。一方面,優化器在過去的十年裏發展很快。這就是說,VS6實現的語言和VS10實現的語言有很多不同之處。兩者都被MicroSoft稱爲「C++」,但事實是它們不是相同的C++,並且在許多情況下它們根本不是C++。特別是,當編譯器是新的時候,VS6有很多甚至不是合法的C++,並且在C++發佈後變得無效。考慮:

for(int i = 0; i < 10; ++i) 
{ 
/* ... */ 
} 
cout << i; 

在VC6中,上述內容是合法的,定義明確的,按預期進行編譯和運行。但是由於更新的標準,它是無效的C++。

這只是列舉了太多例子之一。您應該查看MS爲VC6和VC10之間的每個編譯器發佈的許多重大更改列表。以下是another answer我發佈前的幾個:

決定是否& 如何進行這個項目時,應審查重大更改MS的名單。

Breaking Changes VC 2005 - 2008

Breaking Changes in the Visual C++ 2005 Compiler

Breaking Changes in Visual C++ .NET 2003

+0

謝謝John花時間發佈這個答案。我一直在閱讀突破性的變化。 – oob