设为首页 加入收藏 网站首页
休闲娱乐
军事·社会百态·娱乐八卦·校园
体育·美女写真·幽默笑话·游戏
综合·在线视频·搞笑图片·灵异
两性生活
两性知识·性爱技巧
情色实录·两性图片
女性健康·同性之恋
电脑网络
网络编程·网页制作·软件教学
操作系统·图形图象·冲浪宝典
网络安全·邮件系统·认证考试
热点专题
芙蓉·真人漫画
72式·欲望都市
帅哥·人体彩绘
您现在的位置: 世纪中国 >> 网络编程 >> ASP.NET教学 >> asp.net技巧 >> 教程正文
.net内存回收与Dispose﹐Close﹐Finalize方法
作者:中国图霸    教程来源:网络    点击数:    更新时间:2007-1-1
;    //创建一个FileStream对象
 9        FileStream fs = new FileStream(@"C:\test.txt", FileMode.OpenOrCreate);
10        Console.WriteLine("您可以尝试在系统中删除c盘下的test.txt(回车键继续)");
11        //暂停程序执行﹐并尝试在系统中删除那个文件
12        Console.ReadLine();
13
14        /**//*进行垃圾收集*/
15        GC.Collect();
16        Console.WriteLine("再删一下试试");
17        Console.ReadLine();
18    }
19}
 6.注意中间那行代码:

GC.Collect();
这是强制要.net垃圾收集器进行垃圾收集。
我们再去尝试删除test.txt﹐居然可以被删除了﹐为什么呀?(fs不是没有关闭那个SafeFileHandle吗?)﹐让我细细道来﹕

7.我们首先了解一下.net垃圾收集器进行垃圾收集的四种时机(参见﹕.net框架程序设计 李建忠译)
a.最常见的﹕当.net觉得合适时﹐例如它感到内存紧张了(朮语称为﹕0代对象充满)
b.微软强烈不建议使用的﹕GC的Collect方法调用(就是我们上面用的这种啦﹐因为会降低性能﹐会挂起进程, 等等﹐反正听微软的吧。当然某些时候可以用﹐就像我上面用来测试的代码﹐呵呵...)
c.应用程序域卸载时(AppDomain)
d.CLR被关闭时

8.现在我们可以明白第1个例子为什么在程序结束后文件可以被删除﹐因为CLR被关闭时﹐.net执行了垃圾收集(也就是等同于第二个例子的GC.Collect()代码)

9.所以现在所有的问题都集中到垃圾收集上面﹐它做了什么?

a.垃圾收集器在判断一个对象不会再被引用到后﹐就开始对它进行垃圾收集(即回收内存)
b.清空内存(即把托管堆中的内存收回来)
c.但是对象的有些字段引用到了非托管资源怎么办?如FileStream的_handle
d.所以我们必须告诉垃圾收集器﹐在你回收我的内存之前﹐先帮我执行一个方法来收回我的非托管资源﹐以免托管堆的内存被你回收了﹐而我引用的非托管资源的内存却被泄漏了。
e.这个方法就是Finalize()﹐也就是C#的 ~ClassName() 方法(同C++中的析构语法)
f.所以一个对象如果存在Finalize方法时﹐垃圾收集器在收回它的内存之前就会自动调用这个方法
g.这样我们就可以把那些东东(非托管资源)给清理干净了

由此看来﹐垃圾收集器提供的这种机制就是为了更好的完善.net的自动内存管理的功能﹐让我们也可以参与到垃圾收集中去

10.我们再来看看GC.Collect()这行代码或CLR关闭时.Net做了什么﹕
a.垃圾收集器启动﹐发现fs引用的那个对象已经没用了(当然CLR关闭时才不管你有没有用﹐通通回收)﹐于是对它进行内存回收
b.发现fs的类型﹕FileStream提供了Finalize方法﹐于是先调用这

上一页  [1] [2] [3] [4] [5] 下一页

分类推荐
社会 社会 娱乐 军事 校园
幽默 体育 女性 专题
电脑 编程 网页 软件 系统
安全 图象 冲浪 认证
搞笑 人物 动物 物品 表情
签名 色图 漫画 奇闻
美女 明星 清纯 自拍 欧美
丝袜 卡通 性感 走光
两性 知识 性图 孕育 技巧
同性 单身 情感 实录
视频 写真 搞笑 MTV 翻唱
写实 片段 游戏 综艺
asp.net技巧热门文章
普通教程 ASP.NET里常用的JS
普通教程 UpdatePanel与UrlRewrite
普通教程 .net内存回收与Dispose﹐Close
普通教程 用MasterPage 代替 PageBase
普通教程 DataSet 添加数据集、行、列、
普通教程 ASP.NET组件DataGrid的分页实用
普通教程 使用WebClient自动填写并提交A
普通教程 ASP.NET中水晶报表的使用
普通教程 对NDoc支持.net2.0的异常分析及
普通教程 关于ASP.NET调用javascrip
普通教程 MSBuild, NAnt, NUnit, MSTest
普通教程 asp.net 2.0 上传控件的使用
普通教程 UpdatePanel和自定义控件中的客
普通教程 ASP.NET—From验证:全部代码及
普通教程 自己写的一个asp.net的生成曲线
普通教程 js操作listbox
普通教程 ASP.NET 崩溃-SiteMap中疯狂的
普通教程 ASP.NET 2.0-选用DataSet或Da
普通教程 用.net 处理xmlHttp发送异步请
普通教程 ASP.Net 2.0 图形控件简述

  广东广州海珠区 世纪网络工作室 版权所有 上海电信提供网络带宽
信箱: 9297659@qq.com 粤ICP备06113754号