2010-09-15 45 views
0

我正在使用混合本机和托管Visual C++,在本机中使用STL。我有一个奇怪的问题。看起来,当我在发布模式下编译我的软件并设置了所有优化之后,我的软件运行速度始终低于“调试”模式。这里有什么可能是错的?VS2008 C++发布模式比调试模式慢

这是我的调试命令行选项:

/OD/d “WIN32”/ d “_DEBUG”/ d “_UNICODE”/ d “UNICODE”/ FD/EHA/MDD/FO “调试\” /Fd"Debug\vc90.pdb“/ W3/nologo/c/Zi/clr/TP/errorReport:prompt/FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.dll“/ FU” c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Drawing.dll“/ FU”c: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Windows.Forms.dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.XML.dll“

这些是我的发布命令行选项:

/Oi/Ot/Oy/GT/GL/D“WIN32”/ D“_SECURE_SCL = 0”/ D“_HAS_ITERATOR_DEBUGGING = 0”/ D“VC_EXTRALEAN”/ D“_UNICODE”/ D“UNICODE” EHa/MD/Fo“Release \”/Fd"Release\vc90.pdb“/ W3/nologo/c/clr/TP/errorReport:prompt/FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Data.dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Drawing。 dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Windows.Forms.dll“/ FU”c:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.XML。 DLL“

+0

然后只需发布Dubug代码。 – 2010-09-15 16:41:27

回答

1

这是完全不可能从命令行开关诊断,你必须使用一个分析器。

但有一点是相关的,你使用/ clr选项。除非您明确使用代码中托管的#pragma,否则所有内容都将转换为IL,即使是STL模板代码。这意味着您的优化设置不会产生任何影响,因为它们仅适用于生成的机器代码。然后,您将接受JIT编译器的优化。例如,当你有一个调试器时,默认情况下它不会进行优化。

+0

您的意思是#pragma unmanaged? – Nigel 2010-09-16 21:29:28

+0

当然,也可以工作。我从不使用它,因为我更喜欢将所有非托管位保存在单独的DLL中。 #pragma管理(推送,关闭)并在头文件和胶水周围弹出。 – 2010-09-16 22:21:45

0

尝试分析发布版本以查看是否发现任何明显不正确的缓慢。如果需要,将其与调试版本的配置文件输出进行比较。或者,如果调试版本主观上“足够快”,只是释放(尽管可能会有反向工程影响)。

相关问题