我正在使用混合的Native和Managed Visual C ++,在Native中使用STL。我有一个奇怪的问题。似乎当我在发布模式下编译我的软件并设置了所有优化时,我的软件运行速度始终低于调试模式。这可能有什么问题?
这些是我的Debug命令行选项:
/ Od / D“WIN32”/ D“_DEBUG”/ D“_UNICODE”/ D“UNICODE”/ FD / EHa / MDd / Fo“Debug \”/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”/ FD / EHa / MD / Fo“发布”/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 :(得分:1)
从命令行开关诊断是完全不可能的,你必须使用分析器。
然而,有一点与您使用/ clr选项有关。除非您在代码中明确使用#pragma managed,否则所有内容都将转换为IL,甚至是STL模板代码。这意味着您的优化设置无效,因为它们仅适用于生成的机器代码。然后,您将接受JIT编译器为优化所做的工作。例如,当您附加调试器时,默认情况下不会优化。
答案 1 :(得分:0)
尝试分析发布版本,看看是否发现任何明显不正确的缓慢。如果需要,将其与调试版本的配置文件输出进行比较。
或者,如果调试版本在主观上“足够快”,那就释放一下(尽管可能存在逆向工程的影响)。