使用C#或C#内部的本机C++性能

本文关键字:C++ 性能 本机 内部 使用 | 更新日期: 2023-09-27 17:57:52

我想知道以下两种场景是否对本机C++代码有相同的性能影响(如果有任何性能影响的话)。

假设我有一个函数cpp_calc(),它正在做一些计算工作,并且是用原生C++编写的。此外,还有用C#编写的cs_show_gui_stuff()

现在,以下哪种情况会恶化本机c++的性能(如果有任何性能损失的话)?

  1. 创建。Net(C#)应用程序,该应用程序运行cs_show_gui_stuff()并使用DllImport在本机C++dll中调用cpp_calc()或将C++转换为COM dll。

  2. 创建一个C++应用程序,该应用程序在C++中实现cpp_calc(),并通过将C#代码放在中来运行cs_show_guid_stuff()。Net COM DLL。

感谢:-)

使用C#或C#内部的本机C++性能

这实际上取决于系统的其他部分主要用什么编写。仅从性能的角度来看,如果方法参数不需要任何特殊的封送处理,一个PInvoke(通过DllImport属性)调用可能会比一个COM调用快。

第三种(可能也是最好的选择)是创建一个托管C++/CLI库,该库调用几乎不影响性能的非托管C++方法,并在C#应用程序中添加对C++/CLI库的引用。然后,C#应用程序可以对C++/CLI应用程序进行托管方法调用,而该应用程序又可以进行非托管方法调用。虽然这增加了一个间接级别,但它将提供比您提到的方法更好的性能。

无论哪种方式,您都将使用实时编译器。我想两种情况下的处罚都是一样的。我个人会选择第一个,因为。NET库在GUI上更健壮-WPF、Silverlight、WinForms、WebForms、Razor。。。你明白我的意思了。