使用C#或C#内部的本机C++性能
Native C++ performance using C# or within C#
我想知道以下两种场景是否对本机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。。。你明白我的意思了。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- 不同的类或结构初始化方法之间的性能差异是什么?