1

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

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

谢谢!

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

4

2 回答 2

0

尽管您可以在 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 语言与预编译语言相比在性能上有所不同;为什么 JIT 语言仍然比原生 C/C++ 更慢且内存效率更低?

于 2012-08-24T08:11:11.443 回答
0

检查这个 http://msdn.microsoft.com/en-us/library/ms998551.aspx

于 2012-08-24T03:45:04.327 回答