【问题标题】:Access C++ code in C# application performance在 C# 应用程序性能中访问 C++ 代码
【发布时间】:2012-08-24 03:32:30
【问题描述】:

我正在考虑在 C# 应用程序中运行用 C++ 编写的函数,无论它是移动应用程序还是普通应用程序。

如果相同的代码(理论上)是用 C# 编写的,那么在 C# 环境(应用程序)中运行用 C++(数学处理)编写的代码是否更快或大致相同?

谢谢!

第二个问题:如何在 C# 应用程序中包含和访问 C++ 代码,而不从外部从 DLL 访问它?

【问题讨论】:

  • 作为第一个猜测,如果你想要像-ffast-math 这样的东西,我相信 C++ 可能会给你一些帮助。否则,它可能不值得费心,或者值得被制作成 SSE 而不仅仅是任何 C++。 UPD:而且你不能在边界上做很多“++”。简单的 C 风格调用,仅此而已。

标签: c# c++ performance dll external


【解决方案1】:

【讨论】:

  • -1。虽然链接本身很有用,但答案的格式不适合 SO:请将链接添加为 cmets,或者请提供链接文章的相关摘要以及链接。
【解决方案2】:

虽然您可以在 C# 中接近,但通常 C++ 版本更快(根据我的经验)。 C++ 优化编译器做得更好(编译/优化可能需要更长的时间),而且在 C++ 中,您可以使用 SSE 之类的东西来加快数学运算速度,这对于 C# 来说非常麻烦。我创建的大整数乘法代码在 SSE 中比在汇编程序中快 5 倍,与相同的 C++ 代码相比仅快 10%。 5x 主要来自 SSE 能够用一条指令进行 2x 32 位乘法。

C# 允许使用不安全的代码,您可以在其中执行一些指针操作。加速诸如数组处理之类的事情(因为它通常会检查所有数组访问,这有助于数组密集的数学处理)。你可以回退到使用用 C++ 编写的非托管 DLL

因此,除非您的代码最终会运行数小时,否则我认为优化它可能会很有趣,但并不值得;-)

微软有一个用于 .NET 的 C++/CLI 变体,允许更轻松地混合 C++ 和 C#。请参阅http://www.functionx.com/cppcli/Lesson01.htm 但不确定它是否仍然受支持,并且从我收集的信息来看,它从一开始就被不赞成,但不知道为什么。

您可能还会发现这个堆栈交换问题很有趣,即为什么 VirtualMachine 语言与预编译语言相比在性能上有所不同; Why are JIT-ed languages still slower and less memory efficient than native C/C++?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多