首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++/CLI + C++本机会提高性能吗?

C++/CLI + C++本机会提高性能吗?
EN

Stack Overflow用户
提问于 2013-08-01 10:35:10
回答 1查看 4.2K关注 0票数 3

在我们的项目中,我们有三个模块。C++ (原生),C++/CLI,C#。我们使用C++/CLI在C#中使用C++(本机)代码。为此,我们静态地将C++(本机)链接到C++/CLI,现在我们可以用C#使用C++/CLI管理的dll。

现在,C++(本机)中的代码是简单的数学算法(没有Win32,没有与操作系统的交互)。当我将静态库链接到C++/CLI时,它不会变成托管代码吗?意味着它不会被纳入CLR。

在C++中使用带有C++/CLI的C++(本机)静态库是否提高了性能?我不能用C#本身而不是本机代码来编写代码吗?

请注意,我们在我们的C++ (本机)代码中广泛使用了标准C++库的算法、容器和迭代器。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-01 11:01:34

当我将静态库链接到C++/CLI时,它不会变成托管代码吗?意味着它不会被纳入CLR。

不,不一定。在C++/CLI中,所有托管类型都将编译为MSIL,代码将在CLR下运行。根据您的compiler options,本机类型被编译为MSIL或本机代码。

  • /clr选项生成本机代码和托管代码的混合。
  • /clr:pure选项生成一个只能托管的程序集,该程序集可以包含编译到MSIL的本机类型。这基本上像用C#选项编译的/unsafe代码一样。
  • /clr:safe选项生成不包含本机代码的托管纯程序集。这基本上像没有/unsafe选项的编译的/unsafe代码一样。

在C++中使用带有C++/CLI的C++(本机)静态库是否提高了性能?我不能用C#本身而不是本机代码来编写代码吗?

和所有优化问题一样,答案是它取决于。一方面,本机代码通常比托管代码更快,并且可以进行更高的优化(例如使用SIMD)。另一方面,与混合模式程序集相关联的性能会受到影响.C++互操作实现通常是相当快的(当然比C#的P/Invoke快得多),但是如果您从编译到本机代码中获得的收益还不够大,那么它可能还是不值得的。真正了解这两个选项的唯一方法是测试这两个选项。

托管代码常常受到不好的抨击,特别是来自经验丰富的C++程序员,但事实是,与同等的原生C++代码相比,编写良好的C++代码即使不快,也可以一样快。如果您有一组C#专家,而不一定是C++专家,那么您的C++代码编写得很糟糕,而且速度更慢。最后,当项目的其余部分都使用C#时,维护成本的降低可能意味着即使是类似的性能也是可以接受的。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17991643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档