【问题标题】:Native C++ performance using C# or within C#使用 C# 或在 C# 中的本机 C++ 性能
【发布时间】:2011-05-27 07:48:54
【问题描述】:

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

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

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

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

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

谢谢:-)

【问题讨论】:

  • 这个问题有点与本机代码的性能有关。希望它有所帮助,虽然没有回答你的问题:stackoverflow.com/questions/5693477/…
  • 在试图弄清楚之前,您是否真的测试过计算函数在 C# 中没有可接受的性能?过早的优化 yadda yadda...文字大家都知道 :)=
  • @Medo42 - 它更多的是一个理论问题。我有时会发现自己在各种情况下都会想到这个问题。如果有人可以对这个问题给出完整的答案,我们就不需要测试(在简单的情况下)。除此之外,我们都会学到一些东西:-)。

标签: c# .net c++ native-code


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    无论哪种方式,您都会遇到即时编译器。我猜这两种情况下的惩罚是一样的。我个人会选择第一个,因为 .NET 库在 GUI 上更强大 - WPF、Silverlight、WinForms、WebForms、Razor ......你明白我的意思。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多