设为首页 加入收藏 网站首页
休闲娱乐
军事·社会百态·娱乐八卦·校园
体育·美女写真·幽默笑话·游戏
综合·在线视频·搞笑图片·灵异
两性生活
两性知识·性爱技巧
情色实录·两性图片
女性健康·同性之恋
电脑网络
网络编程·网页制作·软件教学
操作系统·图形图象·冲浪宝典
网络安全·邮件系统·认证考试
热点专题
芙蓉·真人漫画
72式·欲望都市
帅哥·人体彩绘
您现在的位置: 世纪中国 >> 网络编程 >> ASP.NET教学 >> asp.net技巧 >> 教程正文
.net内存回收与Dispose﹐Close﹐Finalize方法
作者:中国图霸    教程来源:网络    点击数:    更新时间:2007-1-1

.net内存回收与Dispose﹐Close﹐Finalize方法

一. net的对象使用一般分为三种情况﹕

1.创建对象
2.使用对象
3.释放对象

二.创建对象
1.创建对象实际分为两个步骤﹕变量类型宣告和初始化对象

2.变量类型宣告(declare),如﹕

FileStream fs
这行代码会在当前的变量作用域空间(栈或堆)里建立一个叫做fs的变量﹐至少四个字节吧(因为要存一个对象的地址)

3.初始化对象
对象在使用(调用其方法或属性)前﹐必须进行初始化。
如﹕


fs = new FileStream(@"C:\test.txt",FileMode.OpenOrCreate);
这行代码会分成3个步骤﹕
a.在托管堆中分配一块内存﹐其大小等于FileStream中所有字段(当然不包括静态的)的内存总和加上MS认为需要的其它东东。
b.初始化对象的字段(值类型的把其位全部初始化成0,对象初始化为null﹐当然string是一个例外﹐它被初始化成空字符串)
c.调用FileStream相应的构造器﹐这里会初始化一个非托管资源(文件)的私有字段。

三.使用对象
使用对象就没什么讲的﹐就是调用对象的方法(或属性等)来完成某个功能当然为了释放对象而调用的方法其范畴应不属于此类中(现在提到的Finalize等)

四.释放对象
1.释放对象也就是说这个对象我已经不需要了﹐现在我要把其释放﹐以便把其在堆上所占用的内存空间给收回来(当然变量名的内存空间就不需要管了﹐因为它会随其作用域自动消失)

2. .net自动进行内存管理﹐也就是说当它判断一个对象没有用了(当然有自己的算法)﹐它就会将其内存给自动收回来﹐但是其收回的时间一般不确定(当.net认为内存紧张时﹐它就会开始)

BTW:其实我们就是想自己收回对象的内存也不可能﹐因为MS没有提供途径(GC.Collect也是启动.net的内存收集功能)

五.第一个结论
在net中使用对象很简单﹐创建对象之后直接使用就可以了﹐不用了也不要去管它﹐垃圾收集器会帮你把内存要回来的。

六.例外
当对象的成员引用了一个非托管资源时(不在托管堆上分配的内存或资源﹐像文件﹐数据库连接等等)﹐下面以一个例子来说明﹕
System.IO.FileStream类别﹐这是.net基本类库提供的一个非托管资源(文件)封装对象(用Reflector工具反编译mscorlib.dll可见其代码)

1.FileStream毫无疑问封装了一个非托管资源

观其源代码发现有这样一个私有成员﹕


private SafeFileHandle _handle;
 通过构造器调用的Init方法可以发现这个成员的初始化代码﹕


this._handle = Win32Native.SafeCreateFile(text2, num1, share, secAttrs, mode, num2, 
Win32Native.NULL);
 而后者实际上就是kernel32.dll中的CreateFile方法﹐它返回一个HANDLE(即非托管资源引用)

2.我们先来使用这个类别﹕

 

 1using System;
 2using System.IO;
 3
 4public class TestFileStream
 5{
 6    public static void Main(string[] args)
 7&

[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号