我正在使用 VS 2008 来编译和调试我的代码。在我的应用程序中,前端是C#,后端是C++。我通过互操作访问 C++ 代码。
我注意到的一件事是,如果我按 F5,并链接本机代码的调试版本,则运行本机代码将需要 20 秒以上。如果我链接到本机代码的发布版本,则运行它所需的时间会减少到 7-8 秒。
如果我没有附加 VS 2008 调试器(即,我单击 IDE 外部的 exe),并且链接到 C++ 代码的发布版本,则运行 C++ 代码只需要 1 秒。
请注意,对于所有测试,C++ 代码的输入始终相同。
当然,存在一些与调试器的附加和调试构建相关的开销。但性能上的差异太大了。有什么我错过的或者我可以调整的吗?
我觉得这很令人费解;根据我的经验,C# 不会引入这么多开销,无论您是否使用调试器运行,或者是否在调试模式下运行。
我最好的猜测是加载调试符号会减慢你的速度。我在纯非托管 C++ 项目中看到过完全相同的情况,这些项目被设置为自动加载所有 Windows 系统库的符号文件。确保您没有自动加载调试符号:
- 在“工具”菜单中,单击“选项”。
- 将“调试”类别展开到左侧,然后选择“符号”子类别。
- 选中标有“仅在手动加载符号时搜索上述位置”的复选框。
此外,请考虑混合模式调试非常慢。
如果您不需要单步执行 C++ DLL 中的代码,您可以尝试关闭项目属性中的“启用非托管代码调试”选项:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)