C#VS C++性能比较

问题描述:

可能重复:
How much faster is C++ than C#?C#VS C++性能比较

您好!

在实际使用中,有没有C#比C++更快(性能更好)的情况?

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

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

+3

复制[C++比C#快多少?](http://*.com/questions/138361/how-much-faster-is-c-than-c)...另请参阅:[C++性能与Java/C#](http://*.com/questions/145110/c- performance-vs-java-c)。还有很多其他类似的问题,但大多数倾向于关注具体的算法或问题类型 - 如果您有特定的想法(比如说,Collections.Generic.List的插入性能与std :: vector( )'),然后具体问一下。 – Shog9 2010-10-18 17:06:16

在实际使用中,有没有C#比C++更快(性能更好)的情况?

写在C#(不安全块,针指针,元帅......)相同的性能,在C++编写的本机相同的代码本机代码?

是的,有时候会发生这种情况。看到这里的答案:

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

听说泛型集合是一个显著的性能优势STL - 是真的吗?

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

但是,总的来说,我不会专注于这个级别的性能。如果你正确开发C#和C++,它们都“足够快”。你可以用任何一种语言编写非常非常高效的代码,并且很容易,你可以编写任何语言都可怕的代码。

+4

+1“同样简单,你可以制作任何语言都可怕的代码” – Thorin 2010-10-18 19:58:27

+0

“STL可以非常高效”。那从来不是我的经验。 – 2013-10-19 15:32:01

+0

使用STL迭代器比使用List 集合中的整数索引或C#中的foreach.block要慢。 – 2015-09-10 19:44:03

就我所了解的.NET而言,您无法在C#中编写本机代码。即使不安全的代码也被管理,它只是有更多的系统资源的访问权限,因此更多的责任清理之后。

+0

本机代码是非托管的,除了你可以从C#调用非托管DLLs – UGEEN 2010-10-18 17:06:21

+3

我没有说本地代码管理。 – PVitt 2010-10-18 17:10:27

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

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

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

尽管C#不安全的代码执行得非常好,但它并没有很好地与运行时的其他部分相关联。例如,尝试使用不安全的缓冲区来执行套接字代码,并且您最终只能在任何地方使用固定块,并且变成一场噩梦。不仅如此,C++代码仍然会表现更好。

在实际使用中,有没有C#比C++更快(性能更好)的情况?

动态代码是想到,System.Reflection.Emit和LINQ表达式(尤其是在C#4.0中的新功能)最大的一个真正使代码生成在C#实用,而在C++中可能采取类似的策略明显更多的努力(因此不实际)。

+3

可以想象,在一个大应用程序中,STL可能会比较慢,因为它实例化了不同版本的模板代码,这可能导致缓存问题。虽然我没有数字来支持这个理论! – 2010-10-18 17:09:50

+0

非常真实,尽管我会假设大多数本机编译器都非常擅长提取各种实例化的代码段。 – LorenVS 2010-10-18 17:13:16

+0

这是一个相当主观的答案 - 我希望看到有关索赔的一些证据(即使它们“听起来”可行)。 – 2010-10-18 17:13:25

我有一些使用C#代替C++的性能改进,用于分配/取消分配大量小尺寸对象但大小不同的应用程序。我怀疑垃圾回收是这类工作的好工具。但是,至少在C#/ .NET 2.0中,C++产生明确更快的代码来处理数字数组(对于c#2.0没有SSE支持)。