我正在使用 VS 2008 来编译和调试我的代码。在我的应用程序中,前端是C#,后端是C++。我通过互操作访问 C++ 代码。
我注意到的一件事是,如果我按 F5,并链接到 native 代码的调试版本,则运行 native 代码将需要 20 秒以上。如果我链接到 native 代码的发布版本,运行它所需的时间会减少到 7-8 秒。
如果我没有附加 VS 2008 调试器(即,我单击 IDE 外部的 exe),并且链接到 C++ 代码的发布版本,则运行 C++ 只需 1 秒代码。
请注意,对于所有测试,C++ 代码的输入始终相同。
当然,存在一些与调试器附件和调试构建相关的开销。但性能上的差异太大了。有什么我错过的或者我可以调整的吗?
我发现这很令人费解;根据我的经验,C# 不会引入这么多开销,无论您是否使用调试器运行,或者是否在 Debug模式下运行。
最佳答案
我最好的猜测是加载调试符号是拖慢你速度的原因。我在纯非托管 C++ 项目中看到过完全相同的情况,这些项目被设置为自动加载所有 Windows 系统库的符号文件。确保您没有自动加载调试符号:
- 在“工具”菜单中,点击“选项”。
- 向左侧展开“调试”类别,然后选择“符号”子类别。
- 选中标有“仅在手动加载符号时搜索上述位置”的复选框。
此外,请考虑混合模式调试非常慢。
如果您不需要单步执行 C++ DLL 中的代码,您可以尝试关闭项目属性中的“启用非托管代码调试”选项:
关于.net - 当附加调试器时,从 .Net 代码调用 C++ dll 的速度极其缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929616/