C#与C ++性能比较

时间:2010-10-18 16:58:36

标签: c# c++ performance

  

可能重复:
  How much faster is C++ than C#?

您好!

在实际使用中,C#是否比C ++更快(性能更好)?

我听说泛型集合比stl具有显着的性能优势 - 这是真的吗?

用C#编写的本机代码(不安全块,引脚指针,Marshal ......)与C ++本机编写的相同代码具有相同的性能吗?

4 个答案:

答案 0 :(得分:6)

  

在实际使用中,C#是否比C ++更快(性能更好)?

  

用C#编写的本机代码(不安全块,引脚指针,Marshal ......)与C ++本机编写的相同代码具有相同的性能吗?

是的,有时会发生这种情况。请参阅答案:

Why would I see ~20% speed increase using native code?

  

我听说泛型集合比stl具有显着的性能优势 - 这是真的吗?

不一定。 STL可以非常高效 - 通常比.NET中的泛型集合更有效。

但是,总的来说,我不会专注于这个级别的表现。如果你正确地开发它们,C#和C ++都“足够快”。您可以使用这两种语言制作非常高效的代码 - 同样容易,您可以制作在任何一种语言中都表现出色的代码。

答案 1 :(得分:5)

  

我听说泛型集合比stl具有显着的性能优势 - 这是真的吗?

我非常怀疑它,STL使用模板,它可以绕过JIT开销并仍然创建真正的,编译的,静态类型的集合。

  

用C#编写的本机代码(不安全块,引脚指针,Marshal ......)与C ++本机编写的相同代码具有相同的性能吗?

虽然C#不安全代码执行得非常好,但它并没有很好地与运行时的其余部分绑定...例如,尝试使用不安全的缓冲区执行套接字代码,并且您最终到处都使用固定块,并且它变成了一场噩梦。不仅如此,C ++代码仍然会表现得更好。

  

在实际使用中,C#是否比C ++更快(性能更好)?

动态代码是最令人想到的,System.Reflection.Emit和Linq表达式(特别是C#4.0中的新功能)确实使C#中的代码生成变得实用,而C ++中的类似策略可能需要更多的努力(因此不实用)。

答案 2 :(得分:2)

我使用C#而不是C ++为一个应用程序提供了一些性能改进,该应用程序分配/解除分配大量小型对象,但大小不同。我怀疑垃圾收集是这类工作的好工具。

但是,至少在C#/。NET 2.0中,C ++产生的数字运算速度肯定更快(对于c#2.0没有SSE支持)。

答案 3 :(得分:1)

据我了解.NET,您无法在C#中编写本机代码。即使是不安全的代码也是受管理的,它只能访问系统资源,因此更有责任在之后进行清理。