与 C 和 C++ 相比,为啥 c# 代码需要很长时间才能执行 [关闭]

Posted

技术标签:

【中文标题】与 C 和 C++ 相比,为啥 c# 代码需要很长时间才能执行 [关闭]【英文标题】:why does c# code takes long time to execute compared to C and C++ [closed]与 C 和 C++ 相比,为什么 c# 代码需要很长时间才能执行 [关闭] 【发布时间】:2015-06-12 15:18:59 【问题描述】:

我在一个在线网站上解决一个简单的编码挑战。我已经用 C、C++ 和 C# 编写了相同问题的代码。一旦你解决了问题,网站就会给出一些关于正确性和性能的统计数据。这就是让我眼前一亮的东西。 c# 代码执行时间为 0.06 秒,并给出了结果,其中 C 花费了 0.006 秒,c++ 花费了 0.009 秒。

我的问题,为什么 c# 代码的运行速度要慢 10 倍?或者事实上 c/c++ 的运行速度快了 10 倍?

以下网站的链接。

C code C++ Code C# Code

我假设所有三个代码块上都有相同的测试用例。

【问题讨论】:

您可能会发现阅读***.com/q/686483/79061的答案很有用 您希望得到什么答案?像“C++ 快/慢 x 倍”这样的一般规则并不存在。但是,C++“通常”比 C# 和 Java 之类的语言快(如果代码为每种比较的语言编写得很好。在每种语言中都可以编写慢速程序) 提供代码作为外部链接是个坏主意。如果链接死了,那么这个问题就没有用了。 @deviantfan 不要误会我的意思。我不是在问为什么它快 X 倍。我的目的是询问代码运行速度变慢的可能原因。 我认为您需要进行更多的实验(我不是指通过代码运行网站)来支持您的观察/结论,即 “为什么 c# 代码运行速度要慢 10 倍 [比 c]?”。另外,您之后是否立即再次运行了 c# 应用程序?我敢打赌,由于 JIT 缓存,性能会有所不同 【参考方案1】:

C# 被编译成通用中间语言。然后即时运行 (JIT)。本质上,代码是根据需要编译的。 C 和 C++ 编译成计算机的本机汇编语言。这意味着在它运行时不需要发生任何额外的事情。虽然这是一个广泛的概述,但我恳请您研究一下 JIT 和 CIL,因为这将帮助您更深入地理解。你可以在这里查看它们: Common Intermediate Language, Just In Time

【讨论】:

一般来说,虚拟机/执行环境往往会有启动开销/延迟。对于 Java VM,这是一个比 CLR 更严重的问题。完全有可能 C# 代码实际上运行的速度与等效的 C++ 代码一样快(或者至少执行时间处于相同的数量级)......仅使用 C#,可能需要更长的时间才能到达代码可以由 CPU 执行(启动 VM、加载和解释 IL 元数据、JIT 编译方法)。 我赞成并编辑了我的评论,他最初是正确的。我已经完全迷失了其中的一部分。 @MickyDuncan 附加点 - 站点可能会将 JIT 时间包含在测量中,从而完全扭曲结果...【参考方案2】:

没有严格的理由说明基于字节码的语言(如具有 JIT 的 C# 或 Java)不能像 C++ 代码一样快。然而,在很长一段时间内,C++ 代码的速度明显更快,今天在许多情况下仍然如此。这主要是因为更高级的 JIT 优化实施起来很复杂,而真正酷的优化才刚刚出现。

因此,在许多情况下,C++ 更快。但这只是答案的一部分。 C++ 实际上更快的情况是高度优化的程序,其中专家程序员彻底优化了代码。这不仅非常耗时(因此也很昂贵),而且由于过度优化通常会导致错误。

请记住,像您这样的快速测试并没有多大意义。在许多情况下,c++/c 将与 c# 具有几乎相同的运行时间,除了您可能遇到的几乎所有情况。

【讨论】:

以上是关于与 C 和 C++ 相比,为啥 c# 代码需要很长时间才能执行 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

与 Java 和 Python 相比,为啥每次使用 Cmake 运行 C++ 程序都需要这么长时间?

C#和C++的区别 计算机2级为啥不包括C#

为啥我的 Haskell 代码与 Swift 和 C 相比如此缓慢 [重复]

为啥在 C++ 中覆盖是可选的?

为啥我的 C# 和 C++ dll 表现出不同的行为?

为啥 C++ CLI 索引属性在 C# 中不起作用?