我正在使用VS 2008来编译和调试我的代码。在我的应用程序中,前端是C#,后端是C ++。我通过互操作访问C ++代码。
我注意到的一件事是,如果我按下F5,并且我链接了本机代码的调试版本,则运行本机代码需要20多秒。如果我链接本机代码的发行版本,运行它所需的时间将减少到7-8秒。
如果我没有附加VS 2008调试器(即,我点击IDE外部的exe),并且我链接了C ++代码的发行版本,运行C ++只需1秒钟代码。
请注意,对于所有测试,C ++代码的输入始终是相同的。
当然,调试器和调试版本的附件会产生一些开销。但是性能的差异太大了。可能有什么我想念或者我可以调整吗?
我发现这非常令人费解;根据我的经验,C#不会引入这么多开销,无论您是使用调试器运行,还是以调试模式运行。
答案 0 :(得分:3)
我最好的猜测是加载调试符号会减慢你的速度。我已经看到完全相同的事情发生在纯粹的非托管C ++项目中,这些项目被设置为自动加载所有Windows系统库的符号文件。确保您没有自动加载调试符号:
另外,请考虑混合模式调试非常慢。
如果您不需要能够进入C ++ DLL中的代码,可以尝试关闭项目属性中的“启用非托管代码调试”选项: