自动打扫战场--内存管理.net 学习

来源:互联网 发布:此非曹孟德之诗乎 编辑:程序博客网 时间:2024/04/28 19:30
class MemoryProcess
{
    public static void Main()
    {
        //创建对象,分配内存,并初始化
        FileStream fs = new FileStream(@"C:/temp.txt", FileMode.Create);
        try
        {
            //对象成员的操作和应用
            byte[] txts = new UTF8Encoding(true).GetBytes("Hello, world.");
            fs.Write(txts, 0, txts.Length);
        }
        finally
        {
            //执行资源清理
            if (fs != null) fs.Close();
        }
    }
}
上述示例完成了一个简单的文件写入操作,我们要关注的是FileStream类型对象从创建到消亡的整个过程,针对上述示例总结起来各个阶段主要包括:
l  对象的创建及内存分配。
通过new关键字执行对象创建并分配内存,对应于IL中的newobj指令,除了这种创建方式,.NET还提供了其他的对象创建方式与内存分配,在本章5.2节“对象创建始末”中,将对.NET的内存分配及管理作以详细的讨论与分析。
l  对象初始化。
通过调用构造函数,完成对象成员的初始化,在本例FileStream对象的初始化过程中,必然发生对文件句柄的初始化操作,以便执行读写文件等应用。.NET提供了15个不同的FileStream构造函数来完成对不同情况下的初始化处理,详细的分析见本章5.2节“对象创建始末”。
l  对象的应用和操作。
完成了内存分配和资源的初始化操作,就可以使用这些资源进行一定的操作和应用,例如本例中fs.Write通过调用文件句柄进行文件写入操作。
l  资源清理。
应用完成后,必须对对象访问的资源进行清理,本例中通过Close方法来释放文件句柄,关于非托管资源的释放及其清理方式,详见描述可参见5.3节“垃圾回收”。
l  垃圾回收。
在.NET中,内存资源的释放由GC负责,这是.NET技术中最闪亮的技术之一。CLR完全代替开发人员管理内存,从分配到回收都有相应的机制来完成,原来熟悉的free和delete命令早已不复存在,在本章5.3节“垃圾回收”中,将对垃圾回收机制作以详细的讨论与分析。