【问题标题】:Why would you want to use C# if its slower than C++? [closed]如果 C# 比 C++ 慢,为什么还要使用它? [关闭]
【发布时间】:2010-10-21 16:53:40
【问题描述】:

我正在寻找学习 C++ 和 Java 之后的新语言。我本来打算尝试 C#,但是很多人说它真的很慢,因为它是一种高级语言。那么为什么有人会使用 C#? C++不是更快吗?它是否使开发更容易,但最终产品却更慢?

另外,C# 可以用来做什么?您将它与 Windows 上的大量 .NET 内容以及 ASP.NET 一起使用,但还有哪些其他情况可以使用 C#?会不会有很多工作机会?

【问题讨论】:

  • 我不同意“公然冒犯”的关闭。质疑他们所听到的东西并不冒犯。我觉得这个问题没有错。来自我的 +1(以及重新开放的投票),因为我提出了什么实际上是一个明智的问题。
  • 我不相信我已经被这个问题充分冒犯了。
  • 我投票决定以 S&A 的身份结束。该问题假定了另一个问题的答案:“C# 慢吗”。这就像问你是否还打你的妻子。
  • 为什么关闭?这是很多人都在搜索的一个问题,stackoverflow 社区对为什么使用 C# 而不是 C++ 有很多明智的回答。我个人花费了数小时寻找 C++ 和 .NET 基准,并且会从给出的响应中受益。
  • @CrazyJugglerDrummer - 别担心 - 我不认为你真的让任何人不高兴。我们实际上是一群相当友好的人,所以不要防守。只是有时我们会得到一点触发快乐;-p 欢迎来到 StackOverflow;我希望你觉得它有教育意义和有用。

标签: c# c++ performance


【解决方案1】:

这“一群人”到底是谁?他们将其与什么进行比较?

在大多数情况下,C++并不比 C#“快得多”。它确实在各种情况下都有好处,特别是在您需要更多确定性内存处理的情况下,但根据我的经验,大多数应用程序的瓶颈不在 C++ 可以提​​供帮助的地方。正如 spoulson 所说,很多性能都在设计中,而不是在精确的实现中 - 在那里,能够轻松尝试不同的设计是有帮助的。

当 C# 比 C++ 慢 bit 时,我们为什么要使用它?因为人们普遍认为(即有些人不同意 :) 发展起来会容易得多,而且不会伤到自己的脚。

至于 C# 可以用来做什么......你想要用它做什么?除非您想开发驱动程序和内核,否则对您来说可能没问题。 (甚至操作系统开发也有一些人使用 C#...)

工作机会?加载。

缺点?嗯,.NET 本身只能在 Microsoft 平台上使用。有Mono,但它的可移植性程度不如Java(毫无疑问,根据同一群人的说法,这是另一种“慢”语言)。

【讨论】:

  • 我还阅读了一些案例,由于 .NET 对运行时进行了优化,C# 在计算速度上的表现优于 C++。
  • 你应该在这个列表中添加安全性,缓冲区溢出是最大的风险,这就是 Mac/Linux 和 Windows 机器受到损害的方式..不可变字符串是一件好事
  • 我不确定 Jon Skeet 是否应该被允许再发帖,他正在占用所有的代表(顺便说一句,答案很好)
  • @Hi-Angel:听起来您正试图将 C++ 代码直接移植到 C# 中。这是个坏主意——它们是不同的语言,有不同的习语。同样,如果我尝试将 C# 程序直接移植到 C++ 中,我会发现各种缺失或不同的东西。这并没有说明 C++ 或 C# 的用处——它只是说尝试在另一种语言中使用一种语言的习语是一个坏主意。
  • @Hi-Angel:但是在惯用的 C# 中,我不记得上次我想要 获得结构的大小。出于序列化目的,还有各种其他的做事方式。如果您只是在 C++ 中转储原始字节,那么我个人不会这样做,因为面对在不同架构上运行等时它相当脆弱。我会使用诸如协议缓冲区之类的东西作为数据对象,或“手动”显式序列化。基本上有很多序列化解决方案不需要需要知道结构的大小。
【解决方案2】:

用汇编编写的代码可以非常快。为什么不直接写汇编呢?

不要相信你听到的一切。对于我的所有项目,C# 的速度都非常快。通常,性能比原始平台性能更多地是设计因素。

【讨论】:

  • 不行,太慢了!用硬件构建一切! ;)
  • 不,打卡是未来的方式:-)
  • 另一方面,我在 Rube Goldberg 机器上进行所有计算。
  • 我用 F# 编写所有东西,它被编译下来适合并行 FPGA,所以它本质上是内置在硬件中的 :)(开玩笑的意思。我不这样做)
  • 当我看到最初的帖子时,您的回复几乎是我脑海中的想法。一切都在这里和那里进行权衡,速度并不总是 100% 重要。如果您有两辆汽车,其中一辆最高时速为 220 英里/小时,另一辆最高时速为 200 英里/小时……那里真的没有问题。当然,速度较慢,但​​不会慢很多。与此同时,时速 200 英里的汽车比其他汽车更容易驾驶、更实用、成本更低。权衡的真正价值是什么?嗯,这取决于你需要什么。
【解决方案3】:

我不得不说,与你交谈的人根本不知道他们在说什么。干净利落。

许多企业级应用程序都是基于 C# 和其他 .Net 语言构建的。它们本质上并不慢。是的,往往启动时间较慢,但这几乎就是它结束的地方。

我注意到您在语言列表中提到了 Java。如果您对 Java 的速度感到满意,C# 不会出现任何问题。一般来说,在许多不同类型的基准测试中,C# 的性能至少与 Java 一样好。

【讨论】:

    【解决方案4】:

    我上一家公司是由 5 位 C++ 资深人士创立的,每个人都有 15 年以上的经验。他们花了一个多月的时间来构建某个 Windows 服务。其中一位发现并涉足了 C#。在一周之内,他比集体在他们一个月内取得的进展更进一步。不久之后,他们都切换到了 C#。

    如果 C# 的执行速度可能较慢,为什么还要 C#:您对这种程度的快速开发有何评价?

    【讨论】:

      【解决方案5】:

      为什么要慢? 事实上,C# 被编译为“中间语言”,它在运行时是 JIT 的,但这可以为您带来性能优势,因为运行时可以为代码运行的平台生成最优化的...

      根据您要编写的应用程序,语言的“速度”会产生轻微影响。 您的应用程序的性能主要取决于您设计应用程序的方式,如果您充分利用所使用的工具/技术等... 当然,C# 不是灵丹妙药,有些项目你不应该使用它,只是因为它不是适合这项工作的工具,但它可以很好地用于大多数商业/企业应用程序。

      【讨论】:

      • 它将为您提供开发时间和调试优势。但它不会给你任何优于 C/C++ 的性能优势。
      【解决方案6】:

      我还没有发现很多例子表明 C# 不是一个好的语言选择,而 .Net(或 Mono)不是一个像样的平台。值得注意的例外是内核级开发或驱动程序。有很多领域需要低水平和原始性能。对于大多数(如果不是全部)业务或企业应用程序,C# 是更好的开发选择之一。它得到了很好的支持,可以与许多其他系统、库、通信渠道和已经可用的组件一起使用,更不用说它是一种相当不错的语言(尤其是 3.5)。

      ASP.Net 不是一个糟糕的平台,我通常发现对象/控件堆栈是复杂交互的缺点之一。我认为 ASP.Net MVC 更适合可扩展的基于 Web 的应用程序。同样,它比我过去使用过的许多其他系统都要好。

      在服务层,甚至 GUI 开发方面,它都相当不错。与桌面 GUI 应用程序相比,我在基于 Web 的应用程序和服务/通信/业务层方面的经验要丰富得多,因此不能对此发表太多评论。我觉得很多 GUI 开发更多的是关于 IDE/Toolkit,而不是特定的语言。

      至于慢,您专门列出了 Java,在大多数情况下,C#/.Net 与 Java 一样快或更快。恕我直言,使用 C# (Visual Studio) 在 Java (Eclipse) 上的开发特别顺畅。对于基于 Web 的应用程序,我更喜欢 ASP.Net MVC(甚至 ASP.Net)而不是 Swing。但这只是我。

      【讨论】:

      • 只是想评论一下,就我今天使用的系统而言,除了 C#、Node/JavaScript 和 Python 之外,我还会认真考虑 Go 或 Rust。考虑到选项,这些天我更倾向于首先使用 Node/JS,然后使用 Rust。
      【解决方案7】:

      与您交谈的人不知道他们在说什么。总而言之,C# 是一种与 Java 非常相似的语言;它具有大多数相同的优点和缺点。它的工作方式非常相似(Java/C# 被编译成中间语言/字节码,被解释或 JIT 编译为本机代码,具有各种类似的优化,作为程序员,您无需担心)。它在许多与 Java 相同的情况下使用,并且确实针对相同的市场。它的发展速度更快,并且作为一种语言带来了很多创新,但它(在实践中)几乎仅限于 Windows,如果这是你的关注点的话。就业市场也类似。两者都是非常流行的语言。

      至于要学习的语言,我会建议一些不同的东西。你说你懂 C++ 和 Java; C# 应该不难上手。潜在的雇主会知道这一点。试试 Scala 或 Python。两者都会给你一些关于事物的新观点(C# 没有那么多),并通过教你新的思考方式让你成为一个更好的程序员,而不仅仅是在你的盒子里添加另一个工具。

      【讨论】:

        【解决方案8】:

        C# 并不总是较慢 - 在许多情况下,它的性能与您列出的任何语言一样好。通常算法与速度有关,而不是语言的选择。

        但是,C# 非常具有表现力,并且有一个很棒的基类库可供使用,并且编译速度超快。这意味着它非常易于使用,并且可以让您比许多其他语言(尤其是 C++)更有效率。例如,我刚刚有一个小项目,我会在 C++ 中为 1 人周预算,而我们在 C# 中不到一天就完成了,主要是因为基类库简化了很多任务。

        【讨论】:

        • 而使用 F#,您将在一小时内完成它 :)
        【解决方案9】:

        使用 C# 而不是 C++ 的一个重要原因............看看 C++ 的所有缓冲区溢出问题,人们接管了你的机器,因为他们在你的字符串中注入了可执行代码 或内存泄漏......垃圾收集器非常方便恕我直言

        【讨论】:

          【解决方案10】:

          即使 C++ 运行速度更快,但在当今的计算机上差别并不大。这就是为什么在 cpu 和内存相当有限的移动设备上,C/C++ 仍然被广泛使用。

          但请考虑开发时间。如果使用 C++ 需要 2 个月,使用 C# 需要 1 个月,你会选择哪个?当需要进行大的修改/重构时,更高级的语言可以显着加快和轻松完成!

          【讨论】:

          • Java,并不比C#快,经常用在手机上。
          【解决方案11】:

          我肯定会使用 C#。它实际上是平均速度,如果你喜欢 java,它几乎完全一样,因为它们都是基于 C++ 的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-09-14
            • 2015-10-04
            • 2012-02-19
            • 1970-01-01
            • 2021-07-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多