在附加调试器时,从.Net代码调用C ++ DLL会非常慢

时间:2011-02-08 04:41:03

标签: .net c++ visual-studio visual-studio-2008 interop

我正在使用VS 2008来编译和调试我的代码。在我的应用程序中,前端是C#,后端是C ++。我通过互操作访问C ++代码。

我注意到的一件事是,如果我按下F5,并且我链接了本机代码的调试版本,则运行本机代码需要20多秒。如果我链接本机代码的发行版本,运行它所需的时间将减少到7-8秒。

如果我没有附加VS 2008调试器(即,我点击IDE外部的exe),并且我链接了C ++代码的发行版本,运行C ++只需1秒钟代码。

请注意,对于所有测试,C ++代码的输入始终是相同的。

当然,调试器和调试版本的附件会产生一些开销。但是性能的差异太大了。可能有什么我想念或者我可以调整吗?

我发现这非常令人费解;根据我的经验,C#不会引入这么多开销,无论您是使用调试器运行,还是以调试模式运行。

1 个答案:

答案 0 :(得分:3)

我最好的猜测是加载调试符号会减慢你的速度。我已经看到完全相同的事情发生在纯粹的非托管C ++项目中,这些项目被设置为自动加载所有Windows系统库的符号文件。确保您没有自动加载调试符号:

  1. 在“工具”菜单中,点击“选项”。
  2. 将“调试”类别展开到左侧,然后选择“符号”子类别。
  3. 选中标记为“仅在手动加载符号时搜索上述位置”的复选框。
  4. Check "Search the above locations only when symbols are loaded manually"


    另外,请考虑混合模式调试非常慢。

    如果您不需要能够进入C ++ DLL中的代码,可以尝试关闭项目属性中的“启用非托管代码调试”选项:

    Uncheck "Enable unmanaged code debugging"