C# 的析构以及垃圾回收实例分析
程序员文章站
2023-12-12 20:54:16
c# 的析构以及垃圾回收实例分析
看书时,自己写的例子代码,了解到几个知识点,记载下来。同时发现自己手写代码的能力比较弱,还是得多写一下。
using syst...
c# 的析构以及垃圾回收实例分析
看书时,自己写的例子代码,了解到几个知识点,记载下来。同时发现自己手写代码的能力比较弱,还是得多写一下。
using system; namespace consoleapplication { public class program { public static void main(string[] args) { console.writeline("hello world!"); fun(); gc.collect(); //4、若不显式回收,则控制台不打印回收行。 console.writeline("end!"); } public static void fun(){ //1、此处必须有static a a=new a(); a.dispose(); //gc.collect(); //3、此处回收无效,因为a还没释放 } public class a:idisposable{ /* protected override void finalize(){ //2、析构实际是重载finalize,但不能直接写重载。编译器自动重写finalize,所以代码中,只能用 析构函数。 console.writeline("some one disposed!"); }*/ ~a(){ console.writeline("some one finalize!"); } public void dispose(){ console.writeline("some one disposed!"); } } } }
1、该代码的输出为:
hello world! some one disposed! end! some one finalize!
这个回收像极了异步调用!
2、idisposable接口的dispose方法,目的是“不用户不再使用对象时,要手工调用它”
比如文件打开,数据库访问等。需要及时释放。
明显这个概念和垃圾回收是两个概念。释放后,该对象仍然存在,有待运行环境来回收,见最后一行。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!