我已经思考这个问题有一段时间了。
当然,在C#中有些东西并没有为速度做出优化,所以使用那些对象或语言调整(例如LinQ)可能会导致代码变慢。
但是,如果您不使用任何这些调整,而只是将同样的代码片段在C#和C++中进行比较(很容易将一个翻译为另一个),它真的会慢那么多吗?
我看到的比较表明,在某些情况下,C#可能会更快,因为理论上JIT编译器应该实时优化代码并获得更好的结果:
我们应该记住,JIT编译器在实时编译代码,但这是一次性的开销,相同的代码(一旦到达和编译)不需要再次在运行时编译。
GC也不会增加太多额外的开销,除非您创建和销毁成千上万的对象(如使用String而不是StringBuilder)。在C++中这样做也将很昂贵。
我想提出的另一点是,在.NET中引入的DLL之间更好的通信方式。.Net平台比基于托管COM的DLL更好地进行通信。
我没有看到任何固有的原因说明为什么语言应该更慢,而且我真的认为C#不比C++慢(从经验和缺乏一个好的解释来看)。
那么,用C#编写的相同代码片段是否会比C++中的代码更慢? 如果是,那么为什么?
一些其他参考资料(虽然谈论了这个问题,但没有关于为什么的解释):