C++/CLI是否比C#更快?

15

C++ / CLI是否比C#更快? 它在哪种类型的操作中更快?

6个回答

15

不一定。然而,C++/CLI消除了C#中存在的许多非高效方式(例如装箱)周围的语法糖。

此外,C++/CLI允许您更加干净地与非托管代码进行互操作,实际上允许您混合使用托管/非托管代码,在性能至关重要的环境中可能会有好处。

编辑:

请参见此帖子以了解一些差异:http://msdn.microsoft.com/en-us/library/ms379617(VS.80).aspx


谢谢,这是一个看待问题的不同方式,但我想它确实带来了性能上的好处,因为它有助于编写高性能的代码。 - LorenVS
然而,C++/CLI引入了自己的语法糖,用于模拟堆栈分配和通过“Dispose”调用实现RAII。 - Pavel Minaev
我不明白为什么使用C++/CLI会比在C#上使用Interop编写完全相同的代码更快。当然,在开发时,手头有本地函数而无需声明dllimport是很方便的,但是从你定义了dllimport开始,为什么C++/CLI代码会更快呢? - devoured elysium
@devouredelysium:1. 并不是所有的东西都可以轻易地归纳为一个或两个函数。有时你需要对象(状态)。2. 编组会带来一定的成本。 - Ed S.

8

由于它们都在.NET框架上运行,我认为性能差异将是微不足道的。任何差异几乎肯定是由使用的编译器的好坏决定的。


4
短答案是“不”。为什么?因为C++/CLI中的引用类型编译成MSIL,与C#相同。C++/CLI的好处(长答案)是,您可以轻松调用本机代码,这在许多情况下更快。尽管如此,如果您编写一个本机C++类并希望在由托管类调用时以本机方式执行,那么该本机C++类必须在没有CLR支持的情况下进行编译(this question介绍了如何做到这一点)。

2

任何使用C++/CLI编写的托管代码,实质上与等效的C#代码完全相同,假设编译器准确无误,它们最终都会成为中间语言指令。然而,C++/CLI使得将非托管代码混合到托管部分中变得容易,如果进行了良好的优化,则可能提供相当大的速度优势。


1

由于它们都是编译成相同字节码并在同一虚拟机上运行的.NET语言,我认为通常情况下不会有区别。

C++/CLI实际上只是为.NET和C++之间提供语言互操作性而设计的。


3
C++/CLI是自成一派的完整语言,即使在/clr:pure编译环境中也比C#具有一些优点。 - Reed Copsey
我认为这个产品投入了很多的精力。很难想象它只是为了互操作而设计的。 - Tristan

0

是的,因为除了一些细节外,您可以像使用任何其他库一样使用 .NET,并继续拥有 C++ 的强大功能。混合使用 C++ 类和 .NET 类、内联汇编、创建驱动程序等。在 C# 中,您可以使用不安全代码,但不能访问 Direct2D API,例如它是受限制的。

Direct2dTest::MyForm^ form = gcnew Direct2dTest::MyForm();

//use (HWND)form.Handle.ToPointer() to acces the hwnd;

form->Show();
//you can use 
//System::Windows::Forms::Application::Run(form); 
//or a classic win32 loop
while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接