使用C#或C#内部的本机C++性能
本文关键字:C++ 性能 本机 内部 使用 | 更新日期: 2023-09-27 17:57:52
我想知道以下两种场景是否对本机C++代码有相同的性能影响(如果有任何性能影响的话)。
假设我有一个函数cpp_calc()
,它正在做一些计算工作,并且是用原生C++编写的。此外,还有用C#编写的cs_show_gui_stuff()
。
现在,以下哪种情况会恶化本机c++的性能(如果有任何性能损失的话)?
-
创建。Net(C#)应用程序,该应用程序运行
cs_show_gui_stuff()
并使用DllImport
在本机C++dll中调用cpp_calc()
或将C++转换为COM dll。 -
创建一个C++应用程序,该应用程序在C++中实现
cpp_calc()
,并通过将C#代码放在中来运行cs_show_guid_stuff()
。Net COM DLL。
感谢:-)
这实际上取决于系统的其他部分主要用什么编写。仅从性能的角度来看,如果方法参数不需要任何特殊的封送处理,一个PInvoke
(通过DllImport
属性)调用可能会比一个COM调用快。
第三种(可能也是最好的选择)是创建一个托管C++/CLI库,该库调用几乎不影响性能的非托管C++方法,并在C#应用程序中添加对C++/CLI库的引用。然后,C#应用程序可以对C++/CLI应用程序进行托管方法调用,而该应用程序又可以进行非托管方法调用。虽然这增加了一个间接级别,但它将提供比您提到的方法更好的性能。
无论哪种方式,您都将使用实时编译器。我想两种情况下的处罚都是一样的。我个人会选择第一个,因为。NET库在GUI上更健壮-WPF、Silverlight、WinForms、WebForms、Razor。。。你明白我的意思了。