C ++ / CLI比C#更快吗?在哪种类型的操作中它更快?
答案 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);
}