A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李先洋 中级黑马   /  2012-12-16 22:57  /  1184 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C#有自动回收垃圾的功能,到底是谁在完成回收呢?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

3 个回复

倒序浏览
调用Dispose()不是释放对象的内存资源!
调用Dispose()实际上是告诉GC这个对象可以回收了
实际GC回收还有一系列的操作的,这都是.net内部封装的了
ps: GC = 垃圾回收器

编程的好习惯就是要做要规范!如变量命名到程序的流程要清晰

做C#的不用过多在意内存的释放~
以后你实践多了自会明白其中道理,经验才是最重要的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
垃圾回收器GC(garbage collection)啊!这可以说是.NET提供的一种方法,一种机制,这样可以确保应用程序不再使用某些内存时,这些内存会被释放掉!就像吃完饭 收盘子一样,没有代码托管之前,我们要手动释放资源,好比要自己收盘子一样!有了资源托管,这项工作就由系统自动完成了,好比是服务员帮我们收盘子一样!这样我们就可以把更多精力放在代码的逻辑上了!还有GC检查内存的频率是不固定的,有时候一秒钟可能进行上千次的检查,也可能几秒钟检查一次,或者随时进行检查,反正不管怎么说都会自动进行检查就对了,或慢或快而已!所以有些时候我们不一定非要坐等垃圾回收期来检查,必要的时候也需要自己进行通过代码手动释放资源的!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
C#中有GC垃圾回收机制,一般会在最适合的时间进行垃圾回收,GC需会遍历所有内存中的数据是否被引用,如果没有被引用就视为垃圾,然后进行标记,紧接着把所有有效数据转存到下一代内存中,然后清空上面的内存,每代内存的大小是固定的,这意味着当某代内存被装满的时候,GC才会执行回收工作,这是一个带有优化的过程,所以说手工调用GC只会降低托管的性能,频繁调用GC.Collect()反而会造成不必要的资源耗费,况且不确定当前垃圾的数量是否接近临界点,GC回收工作是个很复杂的过程,同时会损耗更多的内存

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马