发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
1:垃圾回收机制
CLR托管堆:
(1)第0代--预算容量256k
(2)第1代--预算容量2M
(3)第2代--预算容量10M
注:在不同的程序中,托管堆上的实际内存管理对象的容量可能不会按照预算容量大小开辟
当第0代对象充满的时候,会自动进行垃圾回收,这时第0代中未被释放的对象成为了第1代,而新创建的对象变成第0代,以此类推,当第0代再次充满的时候会继续执行垃圾回收,未被释放的对象会被添加到第1代,随着程序的执行,第1代对象中也会产生垃圾,此时垃圾回收器并不会立即执行回收操作,而是等第1代被充满变成第2代时被回收并整理内存。
2:Finalize析构函数被调用的条件:
(1)第0代对象充满
(2)显示调用System.GC的Collect方法
(3)Windows内存不足
(4)应用程序被关闭
(5)CLR被关闭
3:释放模式
using System; //要实现释放模式,必须继承IDisposable public class MyClass:IDisposable { private bool disposed = false; private void Dispose(bool disposeing) { if (!this.disposed) { if (disposeing) { Console.WriteLine("调用引用对象的Dispose方法"); } Console.WriteLine("释放类本身非托管资源"); disposed = true; if (disposeing) { GC.SuppressFinalize(this);//禁止终结器的调用 } } } //重写IDisposable中的Dispose方法 public void Dispose() { Dispose(true); } //和上面的方法没区别 public void Close() { Dispose(true); } ~MyClass() { Dispose(false); } } public class Test { static void Main() { //using这个语法的使用,在实现IDisposable接口时才能使用 using (MyClass mc = new MyClass()) { Console.WriteLine("调用mc做些事情"); } //MyClass mc = new MyClass(); //try //{ // Console.WriteLine("调用mc做些事情"); //} //finally //{ // mc.Dispose(); //} } }
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C# 语言参考 (using)
不过,还是有变通的办法来解决这一问题,原因就是应用using语句的类型必然实现了IDisposable接口,那么就可以以下面的方式来完成初始化操作, using (IDisposable font = new Font("Verdana"...
C#中的析构函数
IDisposable 接口包括仅有的一个公共方法,其声明为void Dispose()。我们能实现这个方法来关闭或释放非托管资源如实现了这个接口的类事例所控制的文件,流,和句柄等。当实现了这个方法,对象必须寻求...
c#对于如何释放资源的解释
SqlCommand myCommand = new SqlCommand(commandString, myConnection);using(SqlConnection myConnection = new SqlConnection(connectString))using(SqlCommand myCommand = new SqlCommand(commandS...
[你必须知道的.NET]第十回:品味类型---值类型与引用类型(下)-应用征途
C#抽象类及其方法的学习
} public abstract void AbMethod();// An abstract method } class MyClass : MyAbs//must implement base class abstract methods { public override void AbMethod() ...
类与结构体性能对比测试——以封装网络心跳包为例
} /// <summary> /// 是否已经调用了 Dispose(bool disposing)方法。/// </summary> /// <param name="disposing&q...
using的几种用法
原来只知道using一般用来导入NameSpace,无意中发现该文档,遂转到柠檬树下。using (Class1 cls1 = new Class1(), cls2 = new Class1()){ // the code using cls1, cls2} // call the Dispose on cls1 a...
C#基础之yield与Singleton
C#基础之yield与Singleton.继续调试,当执行MoveNext()方法时才去执行GetResultByYield(),接着执行到yield return随即返回main()方法输出枚举数所代表的集合中的值。这也正是前面调试的时候为什么根本...
行为型模式之观察者模式
抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者...
微信扫码,在手机上查看选中内容