如果它比C++慢,你为什么要使用C#?

Gor*_*son 36 c# c++ performance

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

另外,C#可以用于什么?你在Windows上使用它和很多.NET的东西,以及ASP.NET,但是在其他情况下,人们会使用C#?会有很多就业机会吗?

Jon*_*eet 75

究竟是谁"一群人"?他们比较什么?

对于绝大多数事情来说,C++ 并不比C#"快得多".它肯定在各种情况下都有好处,特别是在你想要更确定的内存处理的地方,但根据我的经验,大多数应用程序的瓶颈并不在C++有帮助的地方.正如斯普尔森所说,设计中有很多性能而不是精确的实现 - 而且,它有助于轻松尝试不同的设计.

为什么我们要使用C#当它是一个有点比C++慢?因为它通常被认为(即一些不同意:)更容易开发而不会在脚下拍摄自己.

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

工作机会?负载.

缺点?嗯,.NET本身仅适用于Microsoft平台.有单声道,但它没有与Java相同程度的可移植性(根据同一群人的说法,毫无疑问是另一种"慢"语言).

  • 我还读过一些案例,由于.NET完成运行时优化,C#可以在计算速度上超越C++. (13认同)
  • 我不确定Jon Skeet是否应该被允许发布,他正在占据所有的Rep(好的答案BTW) (8认同)
  • 你应该为这个列表增加安全性,缓冲区溢出是最大的风险,那就是Mac/Linux和Windows机箱被破坏的方式..可变的字符串是一件好事 (6认同)
  • @ Hi-Angel:听起来你试图将C++代码直接移植到C#中.这是一个坏主意 - 它们是不同的语言,有不同的习语.同样,如果我试图将C#程序直接移植到C++中,我会发现各种各样的东西缺失或不同.这并没有说明C++或C#的用处 - 它只是说试图在另一种语言中使用一种语言的习语是一个坏主意. (4认同)
  • @ Hi-Angel:但是在惯用的C#中,我不记得上次我想*获得结构的大小.对于序列化目的,有各种其他的处理方式.如果你只是在C++中转储原始字节,我不会亲自这样做,因为它在面对不同的架构运行时会相当脆弱.我要么使用像协议缓冲区这样的数据对象,或"手动"显式序列化.基本上有许多序列化的解决方案**不需要知道结构的大小. (4认同)
  • @ Hi-Angel:如果值存储在不同的字节序中,已知*大小*没有帮助,不是吗?(考虑从一台机器转移到另一台机器.)基本上,将内存内容转储到磁盘(或网络)一直是存储数据的一种脆弱方式 - 也是一种使数据结构更难发展的方法.作为C#中的一种方法,它并没有得到特别好的支持,因为这是一个坏主意:) (2认同)

spo*_*son 40

用汇编编写的代码可以非常快.为什么不写在汇编?

不要相信你听到的一切.对于我的所有项目,C#都非常快.通常,性能是设计的一个因素,而不是原始平台性能.

  • 没办法,那太慢了!用硬件构建一切!;) (33认同)
  • 另一方面,我在Rube Goldberg机器上完成所有计算. (7认同)

Jar*_*Par 22

我不得不说你说话的人根本不知道他们在谈论什么.干净利落.

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

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


Din*_*nah 22

我的最后一家公司由5位C++资深人士创立,每位经验都有15年以上经验.他们花了一个多月的时间来构建某个Windows服务.其中一人发现并涉足C#.在一个星期内,他的收入超过了他们当月的集体.不久之后,他们都切换到了C#.

为什么C#如果表现得慢一点:你对这种快速发展的价格是多少?


Fre*_*els 7

它为什么要慢?实际上,C#被编译为'Intermediate Language',它在运行时是JIT',但这可以为您带来性能优势,因为运行时可以为运行代码的平台生成最优化的...

根据您要编写的应用程序,语言的"速度"会产生轻微影响.您的应用程序的性能主要取决于您设计应用程序的方式,如果您充分利用您使用的工具/技术等等......当然,C#不是银弹,并且有些项目您不应该不能使用它,只是因为它不适合这项工作,但对大多数商业/企业应用程序来说都可以.


Tra*_*er1 6

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

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

在服务层,甚至GUI开发方面,它都非常好.我在基于Web的应用程序,服务/通信/业务层方面比在桌面GUI应用程序方面有更多的经验,因此无法在那里发表评论.我觉得很多GUI开发更多的是关于IDE/Toolkit,而不是特定的语言.

至于速度慢,你专门列出Java,在大多数情况下,C#/.Net比Java快或快.使用C#(Visual Studio)而不是Java(Eclipse),IMHO开发特别顺畅.对于基于Web的应用程序,我喜欢Swing上的ASP.Net MVC(甚至是ASP.Net).那只是我.