【问题标题】: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

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

【问题讨论】:

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

标签: c# c++ c performance


【解决方案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# 具有几乎相同的运行时间,除了您可能遇到的几乎所有情况。

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2021-03-12
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多