游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10855|回复: 21

关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

[复制链接]

29

主题

99

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2005-3-1 19:02:00 | 显示全部楼层 |阅读模式
     第一大误区:通常认为c++语言一定比c#等.net语言要来得快。实际上这是要看环境等因素的,下面我将详细阐述和澄清一下这方面的认识。
     首先,象java语言编译为字节码以达到跨平台的目的一样,.net 语言经过第一道编译后也不编译成CPU可直接识别的二进制代码,而是编译为中间语言代码(MSIL),再具体调用执行程序集(什么是程序集?dll,exe文件都是程序集)的时候再由JIT(just-in-time)编译器按执行调用的需要进行再编译成具体平台上的二进制代码,JIT编译器是按需编译的。这种生成方式生成的二进制代码竟然比普通的一次性把所有代码编译为所有平台通用二进制代码的效率要快得多。c++.net 语言中甚至可以针对特定的CPU在编译成二进制代码时进行优化。这一方面 .net 开发语言胜过了 传统c++。
     第二点比较,c#语言中的所有数据类型都分为两种,值类型和引用类型。什么叫引用类型?有点象c++里的指针,引用类型操作的永远只是真实对象的引用,在.net 语言中对引用类型的操作要比在传统c++里的堆栈和堆里操作对象要来得快。
     第三点比较, .net 语言里采用了托管的方式,也就是说引用类型是存放在用户内存区的托管堆里,这部分堆是被管理起来的,托管堆的效率优于普通的堆,具体说来这是因为数据在堆中分配内存需要找寻一块连续可用的内存,普通的堆在大量的数据分配并释放内存后会变得千疮百孔,这点尤其在大型应用中需要及时频繁大量的分配和释放内存的应用中尤为明显,这个时候系统为搜索一块可用的堆内存要比平时慢得多得多。而托管的堆,能在空闲的时候某对象不再使用后自动的释放它,最关键的是它能在平时移动对象在内存中的位置来优化堆,让系统不再为分配内存而进行大量的搜索。这方面是没有弊端的,比传统c++要好得多。后面讲到的内存垃圾搜集机制就有利也有弊。
    第四点, 垃圾收集器。 由于引用类型的分配是在托管堆,而这部分内存的管理是由垃圾收集来进行控制的。.net CLR 把要进行垃圾回收的对象分等级,分别是0生代,1生代,2生代。0生代的对象往往是哪些一次性分配在进行某些短暂的操作后就不再需要的引用类型的对象,这部分对象小到甚至可以放进CPU的二级缓存中去,运算和释放速度相当之快。但当0生代的对象仍然在使用的话,系统不能回收就会把它放进1生代中,1生代就是那些仍然在使用有可能长期存在的对象。当系统发现堆内存不够分配的时候会强制暂时停顿程序的执行进行1代垃圾回收,当一代回收后还不能释放的对象会放到2代中,2代的对象就是那些老顽固,程序中可能始终存在的对象。1代回收仍然不能满足分配内存的需要时会启动2代回收。2代回收还不够时出现异常。所以综上所说,如果程序里有大量的“老顽固”,程序又在大量频繁的分配内存,垃圾回收到2代回收的时候系统将要变得慢得多。如果不是这样的话,程序在运行时的效率并不收什么影响。
    第五点, 有人说.net framework如此的庞大,其既然要保证各语言的兼容性,强类型特征,那实现起来一定费时费力得多。有一定的道理,但也不尽然。我可以告诉你.net 下的string比STL里的string竟然要快,经过验证就是这样,不要象当然地认为什么.net framework是对传统c和c++ API的封装,.net framwork肯定是c++这一点没有疑问吧?但它不是传统API的封装,如果没有win32 API,,net framework API一样能工作。当然话要说回来,net framewok 刚刚开发,又如此的庞大完善,里面肯定有效率不够高的地方。但那可能也只是方法学和计算机编程思想领域内的问题。
    综上五点,用.net 语言编出来的程序是快是慢,要看情况了,具体情况具体分析吧,需要再指出一下的是,一个.net 的程序在启动时候会慢一点,为什么?不要问我。

    第二大误区:通常认为c#是开发网站和web service才用,.net 语言就只是internet 商务(企业)计算应用的开发语言。
    我再次声明的是.net framework不是传统API的封装。有兴趣的人可以翻看一下MSDN下.net framework的参考,其巨大的容量堪称史无前例!几乎我们编写各种商业程序所需要的方方面面它都包括了,它绝对不是仅仅用来做网站编程,web sevice才用也绝不仅仅是只有internet企业计算才可以用,可以编写游戏,可以编写多媒体应用,它还可以编写木马,网络管理工具,它甚至可以用来编写一个新的操作系统。

   好了,今天先讲到这吧,如果您有什么问题,欢迎与我交流 square.jerry    qq: 33293142
MSN :zhengji888@msn.com

0

主题

64

帖子

64

积分

注册会员

Rank: 2

积分
64
发表于 2005-3-1 19:26:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

和微软广告一样,都没什么说服力。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-1 21:30:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

.Net的性能超过C++我不敢说,但是.Net类库中的socket比VCL的socket更有效率,在同一台机器上使用.Net可以接受更多的连接。这个我还是试验过的。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-2 10:40:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

呵呵,你去弄弄linux,看哪个可以接受的连接多。
配合epoll,一台双至强P4处理器linux下的web服务器可以实现同时处理280k用户。

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2005-3-2 11:41:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

不是阿,.net确实比c++慢啊,我有切身体会阿,一个只有几个控件非常简单的窗体程序,运行后,就看硬盘狂转,等2-3秒,才出现窗体,这在c++里是不可能吧
我的机器是amd 2400+, 512 内存,  7200转2mb缓存的硬盘

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-3-2 12:32:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

启动时是多了一步!效率主要是指运行时的!而且.net具有跨平台的先进性

0

主题

64

帖子

64

积分

注册会员

Rank: 2

积分
64
发表于 2005-3-2 12:39:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

JAVA的跨平台都是假的,.net能跨平台?
.net跨来跨去,都是微软的平台。

29

主题

99

帖子

104

积分

注册会员

Rank: 2

积分
104
 楼主| 发表于 2005-3-2 15:34:00 | 显示全部楼层

Re: Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

sx-7: Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

和微软广告一样,都没什么说服力。

先问一句,你了解.net多少?
以后不需再笼统的说谁快谁慢了,具体程序具体分析。再说一句,.net甚至可以跨unix平台,只是现在unix的厂商不给实现。并不是说不可以。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-2 15:44:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

呵呵,楼上也别帮微软打广告了,等你开始用正版的.net framework之后再说这些话。
开发也要考虑成本问题的。

29

主题

99

帖子

104

积分

注册会员

Rank: 2

积分
104
 楼主| 发表于 2005-3-2 15:47:00 | 显示全部楼层

Re:关于对.net语言(c#/VB.net/managed c++等)认识的误区总结

呵呵,我可不是微软的员工,干嘛要打广告? 我从一个程序员的角度出发,用尽可能发展和长远的观点来看待问题,另外对以前.net的误解稍作解释而已,同时也希望和想学习.net的人进行交流而已,如果您看不惯,可以闭起耳朵来不听啊!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 10:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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