游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8332|回复: 29

[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

[复制链接]

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2008-8-23 15:50:00 | 显示全部楼层 |阅读模式
一直以来对CLR即时编译生成的汇编码抱有很多疑问,很多地方并没有像微软声称的那样被优化,尤其是并没有内联(inline)。曾经猜想那是为了IDE 能够调试而少做了一些优化,在不连接调试器的情况下应该能声称最优代码。随着.NET 3.5 SP1的发布,谜团终于解开了。

.NET 2.0的CLR并没有对含有值类型(value type)参数、返回值或局部变量的函数做内联。当然,这也包括所有值类型的属性getter和setter。这是多么令人心痛的性能损失啊!值类型本来是设计成轻量级以提高性能的,结果却在优化方面大打折扣,反而不如引用类型。3.5 SP1终于补救了这一点,虽然太晚了一点,但聊胜于无。

这样C#和C++的性能争论(有争论的必要吗?)完全可以画个句号了:在.NET 3.5 SP1之前,相同的算法必定是C++快。那些对CLR即时编译能对当前CPU架构做特别优化而提高性能的期望可以完全忽略了。

补救虽然来得晚了,但也带来了另外一份礼物:值类型局部变量将能被优化成寄存器变量了。这是个C/C++里尽人皆知却极少被真正实现的优化。直到C语言的 C99规范引入了__strict修饰符,才使这种优化彻底成为可能。而C++目前还只能望洋兴叹,或者等待C++ 0x规范也加入__strict。而新的.NET CLR将能在即时编译的条件下找出能够晋级到寄存器的变量,而不必再访问堆栈,从而大幅提高性能。

参考链接:
http://blogs.msdn.com/clrcodegeneration/archive/2007/11/02/how-are-value-types-implemented-in-the-32-bit-clr-what-has-been-done-to-improve-their-performance.aspx


原文地址:http://blog.csdn.net/Nightmare/archive/2008/08/22/2814596.aspx

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-23 15:52:00 | 显示全部楼层

Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这么快,我刚发你就转到这了——不过为啥是VB版而不是.NET版?

12

主题

733

帖子

734

积分

高级会员

Rank: 4

积分
734
发表于 2008-8-23 16:31:00 | 显示全部楼层

Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这样讨论有意义吗?一个是做本地应用的,一个是做WEB应用的,C++效率再高也不可能做ASP,C#再方便做本地也难成气候

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2008-8-23 16:41:00 | 显示全部楼层

Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了

qrli: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这么快,我刚发你就转到这了——不过为啥是VB版而不是.NET版?

哈哈,没想到遇到作者了。我今天在网上搜到的。转到这是因为 VB 也是 NET 的成员之一,而我是用VB的

50

主题

382

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2008-8-23 16:44:00 | 显示全部楼层

Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了

打酱油的: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这样讨论有意义吗?一个是做本地应用的,一个是做WEB应用的,C++效率再高也不可能做ASP,C#再方便做本地也难成气候


意义不在于跟 C++ 比个高下,而是在于 NET 可以更快了,增加 NET 程序员的信心。
“C#再方便做本地也难成气候”此话武断了,未来如何还是慢慢看吧

61

主题

1429

帖子

1430

积分

金牌会员

Rank: 6Rank: 6

积分
1430
发表于 2008-8-23 16:59:00 | 显示全部楼层

Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

未来C#会淘汰,有新语言替代

29

主题

475

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
发表于 2008-8-23 17:03:00 | 显示全部楼层

Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了

使命召唤: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

未来C#会淘汰,有新语言替代


除非.NET被淘汰,否则C#的地位暂时无人能撼动,不过我还是更喜欢VB.NET些,狗屁微软说什么C#是C++改良版,简直就是在胡说八道

3

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2008-8-23 17:04:00 | 显示全部楼层

Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了

打酱油的: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这样讨论有意义吗?一个是做本地应用的,一个是做WEB应用的,C++效率再高也不可能做ASP,C#再方便做本地也难成气候



暴露目标了哈

未经许可ID:Nightmare

C#也可以做winfrom的....虽然运行效率慢了点点(与C++相比),但其开发速度和效率是快的.最重要的是安全.......

[em2] [em2]

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-23 20:07:00 | 显示全部楼层

Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了

打酱油的: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论

这样讨论有意义吗?一个是做本地应用的,一个是做WEB应用的,C++效率再高也不可能做ASP,C#再方便做本地也难成气候


1.讨论这个没什么意义
2.C#不是专门做Web应用的,只是一个可以用来做Web应用的选项
3.C++可以做ASP.NET,和C#一样,也是一个选项

甲马的家之戏游
暴露目标了哈

没关系,我不参与你们VB版的娱乐活动

12

主题

733

帖子

734

积分

高级会员

Rank: 4

积分
734
发表于 2008-8-23 20:17:00 | 显示全部楼层

Re: Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有

qrli: Re: Re:[转载].NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论


没关系,我不参与你们VB版的娱乐活动


归顺教主吧,保证吃箱喝蜡 享受融化腐鬼 享不尽的巾钱霉女
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 13:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表