终于知道C#为什么这么流行了 因为C#号称是JAVA它表弟,抛弃了许多C++的缺点,甚至连内存管理都……于是大家都不用管内存了,反正有GC嘛!看看我这个帖子的回复情况就知道有那么多人学得那么地肤浅。一看分数来了就挣着抢,可是为什么一到说到事情的根本,C#的内存管理,就无人回复了呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是这个帖子http://topic.csdn.net/u/20081001/17/ad28659e-1f0b-4d8b-8881-d5063dac3e4e.html 貌似C#面试题就有 值类型和引用类型的区别 ~~C++的动态分配内存都要delete 不然就会内存泄露,C#不用管~ 楼主自己比较一下 ildasm 后的 IL 代码:class Demo{ void func1() { byte[] cmd = new byte[] {0x11, 0x03}; } void func2() { byte[] cmd = {0x11, 0x03}; } static void Main() { }}/*.method private hidebysig instance void func1() cil managed{ // 代码大小 20 (0x14) .maxstack 3 .locals init (uint8[] V_0, uint8[] V_1) IL_0000: nop IL_0001: ldc.i4.2 IL_0002: newarr [mscorlib]System.Byte IL_0007: stloc.1 IL_0008: ldloc.1 IL_0009: ldc.i4.0 IL_000a: ldc.i4.s 17 IL_000c: stelem.i1 IL_000d: ldloc.1 IL_000e: ldc.i4.1 IL_000f: ldc.i4.3 IL_0010: stelem.i1 IL_0011: ldloc.1 IL_0012: stloc.0 IL_0013: ret} // end of method Demo::func1.method private hidebysig instance void func2() cil managed{ // 代码大小 20 (0x14) .maxstack 3 .locals init (uint8[] V_0, uint8[] V_1) IL_0000: nop IL_0001: ldc.i4.2 IL_0002: newarr [mscorlib]System.Byte IL_0007: stloc.1 IL_0008: ldloc.1 IL_0009: ldc.i4.0 IL_000a: ldc.i4.s 17 IL_000c: stelem.i1 IL_000d: ldloc.1 IL_000e: ldc.i4.1 IL_000f: ldc.i4.3 IL_0010: stelem.i1 IL_0011: ldloc.1 IL_0012: stloc.0 IL_0013: ret} // end of method Demo::func2*/ LZ如果对底层的东东有兴趣,推荐两本书:《.NET本质论》和《框架设计(第2版):CLR Via C#》 其实lz认为两者是有区别的,但他觉得大多数人会认为两者没有区别,所以当看到大家果然如他想象中那样回答问题,就想大肆嘲笑一番。但实际情况就是:lz自己证明了自己的无知我认为不管是什么语言的高手,都不会以对内存分布情况的了解多少来自豪的,了解这些只是为了更好的去完成工作。 关于内存管理,其他语言如delphi的object pascal、c/c++、c#里的所谓非托管代码无非就是告诉你自己申请(new/alloc)的资源要自己free掉但是难道造车子非要自己造轮子不可?完全可以让别人去生产然后组装,而c#告诉你不用管理,就是为了不让你拘泥于技术细节不可自拔,永远做些低层次的工作,让你有更多的时间去思考系统的整体设计、性能优化/瓶颈、业务逻辑、扩展性、可维护性、团队协作问题等,c#和java的就是希望你成为一个系统分析师过好日子,而不是做个简单的程序员,永远做些别人已经实现而不公开的重复工作和代码编写,当然你如果是做系统级的软件的另当别论,所以做一个大的系统工作量一点没少 楼主喜欢更底层的东西.仍然可以使用C++.没必要用C#Herbert Schildt 写的<<The Art Of C++>>不错. 于是大家都不用管内存了,反正有GC嘛! LZ还是多看看书吧! LZ学院派,我还是比较同意实战派。只要做出来的东西稳定,易用,谁会再去关心你是用的array还是list. 语言都是工具,何必那么较真呢?真相学习的话,还是自己做 OS 和 Dev 吧 顶三楼要看有什么区别IL代码是最明显的。《CLR VIA C#》我有,是本不可多得的好书,楼主可以看看 有gc干嘛不用,那你还用什么c#~ 低级的程序员,当然要用GC,而且只用GC。高手也要用GC,但是他有更多的手段使自己的程序得到最大程度的优化。程序员的追求是不同的。 Production Debugging for .NET Framework Applications - Chapter 2Inside Microsoft .NET IL Assembler 编译器自动第二个函数的cmd加上一个new 首先我承认当时发这个帖子里心里着急,有点偏激。所以楼下的跟着偏激就不足为怪了。然后说明情况,我以前用C++,看到帖子中的那种定义数组的方法自然会产生疑问。于是查msdn->.net中关于new的说明,但它告诉我new就是在堆中申请一块内存,而且没有在旁边注明编译器会自动为byte[] cmd = {0x11, 0x03}之类的写法自动添加new操作符。我之所以用这个题目,是有些故意的:因为前面连续6个回复都在说一样,一样,一样!但到底为什么一样咋不说?我不需要这种肤浅的、重复的“一样,一样,就是一样”,我需要的是为什么,虽然答案也很简单。 谢谢你们!!syeerzy,shalen520,walkingmu,hyblusea,wartim,wuyi8808 C#其实像vb,能省的都省了,能编译器做的都编译器做了,能内部隐含文件处理都内部隐含文件处理了,所以有的时候看代码会觉得逻辑不通的,好事还是坏事呢?不知道了 哎,楼主对c#,确凿的说是对netframework的机制不了解,所以在这里说些无知的话,反倒让人取笑了。netframework推出来的一个很重要的目的就是为了提高开发效率,像c#3.0,4.0里很多新颖的特性,能让开发变得非常快捷,但你用c#2.0的语法也能写出来,但要多很多代码做很多其他处理,他们最终编译后的结果却是一样的。真的是用自己的无知来嘲笑别人,呵呵。 我学C#混饭吃。。混不下去了就改行。我顶C#。。曾经顶过JAVA。。 讲究金钱效率的用C#, 追求免费的用java, 干坏事的用C++ , 想成牛人的用汇编 ,想被叫天才的用机器码 这个我个人从实际的方面出发……而且从某种角度出发……微软大哥的GC并没有比说的那么好用……如果一个EXE你不理会内存……他可以直奔XX MB.。。这个是相当可怕的……如果加点UI处理……就XXXMB我一般写程序的时候还是手动调用回收……很少等他自己回收也许是C++的时候留下的习惯…… 因为微软会骗人呀,说什么C#是更好的C++,还说什么C#与C++一样的行动力, 请不要在这里比较语言的优劣,所谓存在必合理,各有优缺点。各人根据自己的实际各取所需就是了。我也是被迫用C#,因为方向是别人定的,我只做总体框架。其实有很多时候,尤其是工作的时候,想用哪个编程语言不是你自己说了算的。令我当时一时冲动发这个挑衅性的帖子是因为下面两个原因:一、有人告诉我说C#很简单,很VB6似的,拖拖拽拽就行。还好,没有相信。二、连续6个回复都只说一样,就是不提为什么。所以,上面这是我初学C#时遇到的7个人,我遇到了7个,7个都只提表面现象,所以我就说:有太多太多的人对这门语言看得学得很肤浅,这种广泛的批评有错吗?虽然我的C#水平很是一般,但照楼上前几位说的,我还真的就是想取笑、嘲笑上面提到的那些看问题肤浅的人!相比他们,我还是有点自豪滴——起码我还在穷根究底,起码我没有人云亦云:一样、一样、一样!! 大家只说一样一样不告诉你为什么一样,就凭你发帖子的言论和态度,你觉得他们有必要告诉你为什么是一样的吗?用自己的无知取笑别人的无知,用自己的错误再去批评别人. 这世界真TMD疯狂.!!! 我最近看了本书c#集成了C的高效,c++的面向对象结构,vb的快速开发,java的安全最近我也一直在考虑这些"集成"看到回帖受益很深,呵呵谢谢楼主~~~ 你可以说GC效率低,也可以说GC的执行效率低,但千万不要说开发效率低,因为GC就是为了提高开发效率,减少内存溢出,减轻程序员负担的。如果研究过.NET的GC的话,会发现GC的效率是非常高的,或许比你自己回收的效率更高(因为.NET的GC是经过回收效率优化过的)。另外,据说.NET 4.0的GC更快。 顶LZ只是带着C++的旧眼光去看C#罢了 C刚刚出来的时候,汇编的程序员们开始怀疑,打击C认为C在资源回收方面只有一句话就完成了,没有像汇编一样自己一个个的去清除cpu资源,内存资源等等,觉得不安心。过不了多久这些人都用c了,也就没人去争吵这个问题了。 《框架设计(第2版):CLR Via C#》已经读完,觉得像内存管理的东西,了解一下就成,没必要深入研究,要不然还要GC干什么,还要自动内存管理干什么!有这些精力多多的研究下业务! 谁能帮忙把下面这段vb代码转为c# 怎么获取ppt的分辨率 xmldoc.selectNodes的问题,高手进 关于用数组反排序的问题 急问,如何在C#(Winform里面得到访问数据的用户的IP)谢谢 关于Point类型的一点疑问 用window.close关闭窗口时候总提示,是否确认,能不能够不出现? 新手关于设计计算器的问题 组合键如何定义? 用c#协程有什么办法能暂停么?我只看见stop。 很难的 简单正则问题 请教webbrowser有没有强制运行完后再运行下一句?如 this.webBrowser1.Navigate(manager_html, false);
http://topic.csdn.net/u/20081001/17/ad28659e-1f0b-4d8b-8881-d5063dac3e4e.html
C++的动态分配内存都要delete 不然就会内存泄露,C#不用管~
class Demo
{
void func1()
{
byte[] cmd = new byte[] {0x11, 0x03};
}
void func2()
{
byte[] cmd = {0x11, 0x03};
}
static void Main()
{
}
}/*
.method private hidebysig instance void func1() cil managed
{
// 代码大小 20 (0x14)
.maxstack 3
.locals init (uint8[] V_0,
uint8[] V_1)
IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: newarr [mscorlib]System.Byte
IL_0007: stloc.1
IL_0008: ldloc.1
IL_0009: ldc.i4.0
IL_000a: ldc.i4.s 17
IL_000c: stelem.i1
IL_000d: ldloc.1
IL_000e: ldc.i4.1
IL_000f: ldc.i4.3
IL_0010: stelem.i1
IL_0011: ldloc.1
IL_0012: stloc.0
IL_0013: ret
} // end of method Demo::func1.method private hidebysig instance void func2() cil managed
{
// 代码大小 20 (0x14)
.maxstack 3
.locals init (uint8[] V_0,
uint8[] V_1)
IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: newarr [mscorlib]System.Byte
IL_0007: stloc.1
IL_0008: ldloc.1
IL_0009: ldc.i4.0
IL_000a: ldc.i4.s 17
IL_000c: stelem.i1
IL_000d: ldloc.1
IL_000e: ldc.i4.1
IL_000f: ldc.i4.3
IL_0010: stelem.i1
IL_0011: ldloc.1
IL_0012: stloc.0
IL_0013: ret
} // end of method Demo::func2
*/
《.NET本质论》和《框架设计(第2版):CLR Via C#》
我认为不管是什么语言的高手,都不会以对内存分布情况的了解多少来自豪的,了解这些只是为了更好的去完成工作。
但是难道造车子非要自己造轮子不可?完全可以让别人去生产然后组装,而c#告诉你不用管理,就是为了不让你拘泥于技术细节不可自拔,永远做些低层次的工作,让你有更多的时间去思考系统的整体设计、性能优化/瓶颈、业务逻辑、扩展性、可维护性、团队协作问题等,c#和java的就是希望你成为一个系统分析师过好日子,而不是做个简单的程序员,永远做些别人已经实现而不公开的重复工作和代码编写,当然你如果是做系统级的软件的另当别论,所以做一个大的系统工作量一点没少
要看有什么区别IL代码是最明显的。
《CLR VIA C#》我有,是本不可多得的好书,楼主可以看看
有gc干嘛不用,那你还用什么c#~
高手也要用GC,但是他有更多的手段使自己的程序得到最大程度的优化。
程序员的追求是不同的。
然后说明情况,我以前用C++,看到帖子中的那种定义数组的方法自然会产生疑问。于是查msdn->.net中关于new的说明,但它告诉我new就是在堆中申请一块内存,而且没有在旁边注明编译器会自动为byte[] cmd = {0x11, 0x03}之类的写法自动添加new操作符。
我之所以用这个题目,是有些故意的:因为前面连续6个回复都在说一样,一样,一样!但到底为什么一样咋不说?我不需要这种肤浅的、重复的“一样,一样,就是一样”,我需要的是为什么,虽然答案也很简单。
syeerzy,shalen520,walkingmu,hyblusea,wartim,wuyi8808
netframework推出来的一个很重要的目的就是为了提高开发效率,像c#3.0,4.0里很多新颖的特性,能让开发变得非常快捷,但你用c#2.0的语法也能写出来,但要多很多代码做很多其他处理,他们最终编译后的结果却是一样的。
真的是用自己的无知来嘲笑别人,呵呵。
我顶C#。。曾经顶过JAVA。。
这个
我个人从实际的方面出发……而且从某种角度出发……
微软大哥的GC并没有比说的那么好用……如果一个EXE你不理会内存……他可以直奔XX MB.。。这个是相当可怕的……如果加点UI处理……就XXXMB
我一般写程序的时候还是手动调用回收……很少等他自己回收
也许是C++的时候留下的习惯……
我也是被迫用C#,因为方向是别人定的,我只做总体框架。其实有很多时候,尤其是工作的时候,想用哪个编程语言不是你自己说了算的。令我当时一时冲动发这个挑衅性的帖子是因为下面两个原因:
一、有人告诉我说C#很简单,很VB6似的,拖拖拽拽就行。还好,没有相信。
二、连续6个回复都只说一样,就是不提为什么。所以,上面这是我初学C#时遇到的7个人,我遇到了7个,7个都只提表面现象,所以我就说:有太多太多的人对这门语言看得学得很肤浅,这种广泛的批评有错吗?虽然我的C#水平很是一般,但照楼上前几位说的,我还真的就是想取笑、嘲笑上面提到的那些看问题肤浅的人!相比他们,我还是有点自豪滴——起码我还在穷根究底,起码我没有人云亦云:一样、一样、一样!!
用自己的无知取笑别人的无知,用自己的错误再去批评别人. 这世界真TMD疯狂.!!!
c#集成了C的高效,c++的面向对象结构,vb的快速开发,java的安全
最近我也一直在考虑这些"集成"看到回帖受益很深,
呵呵
谢谢楼主~~~
你可以说GC效率低,也可以说GC的执行效率低,但千万不要说开发效率低,因为GC就是为了提高开发效率,减少内存溢出,减轻程序员负担的。如果研究过.NET的GC的话,会发现GC的效率是非常高的,或许比你自己回收的效率更高(因为.NET的GC是经过回收效率优化过的)。
另外,据说.NET 4.0的GC更快。
LZ只是带着C++的旧眼光去看C#罢了
认为C在资源回收方面只有一句话就完成了,没有像汇编一样自己一个个的去清除cpu资源,内存资源等等,觉得不安心。
过不了多久这些人都用c了,也就没人去争吵这个问题了。
《框架设计(第2版):CLR Via C#》已经读完,觉得像内存管理的东西,了解一下就成,没必要深入研究,要不然还要GC干什么,还要自动内存管理干什么!有这些精力多多的研究下业务!