C ++ / CLI比C#更快吗?

时间:2009-08-21 19:28:15

标签: c# c++-cli

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

6 个答案:

答案 0 :(得分:14)

不一定。但是,C ++ / CLI会消除C#中存在的非执行方式(例如拳击)中的大部分语法糖。

此外,C ++ / CLI允许您使用非托管代码实现更加干净的互操作,实际上允许您混合托管/非托管代码,这是一个性能至关重要的环境可能是有益的。

编辑:

有关一些差异,请参阅此帖:http://msdn.microsoft.com/en-us/library/ms379617(VS.80).aspx

答案 1 :(得分:8)

由于它们都运行在.NET框架上,我认为任何性能差异都是可以忽略不计的。任何差异几乎肯定都取决于你使用哪种编译器。

答案 2 :(得分:3)

嗯,简短的回答是没有。为什么? C ++ / CLI中的引用类型编译为MSIL,与C#相同。

关于C ++ / CLI(以及答案很长)的好处是,您可以轻松调用本机代码,这在很多情况下会更快。话虽这么说,如果你编写一个本机C ++类并期望它在托管类中的某个人调用时本地执行,那么必须在没有CLR支持的情况下编译本机C ++类(this question进入如何做到这一点)

答案 3 :(得分:2)

使用C ++ / CLI编写的任何托管代码基本上都与等效的C#完全相同,假设编译器的准确性,因为它们最终都将作为中间语言指令。但是,C ++ / CLI可以很容易地将非托管代码与托管部分混合,如果进行了优化,可以提供相当大的速度优势。

答案 4 :(得分:1)

看到它们都是.NET语言,它们被编译成相同的字节代码,而这些代码反过来又会在我所说的同一个虚拟机上运行,​​没有。

C ++ / CLI实际上只是为了在.NET和C ++之间提供语言互操作。

答案 5 :(得分:0)

是的,因为除了很少的细节外,您可以像继续使用c ++一样使用.net像其他任何lib。将c ++类与.net类混合,内联汇编,根据需要创建驱动程序,等等。在c#中,您可以使用usafe代码,但是例如,您不能访问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);
}