Q-->question A-->answer M-->mention
The Chapter 20th Garbage Collection
M:确保终结操作使用CriticalFinalizerObject类型
在System.Runtime.ConstrainedExecution中定义了一个名为CriticalFinalizerObject类型,CLR以特殊方法对待此类.
1.首次构造派生于此类的任何对象时,CLR将会对层次关系中所有的Finalize方法进行JIT编译,其确保对象 可收集时,本地资源释放
2.CLR在调用非派生自此类的Finalize()后,调用派生自此类的Finalize()
3.如果程序域被一个宿主应用程序中断,那么CLR也将调用派生于此类的Finalize()
M:使用SafeHandle类型实现非托管代码之间的互操作,此类位于Microsoft.Win32中
Q:有哪些事件将会导致Finalize()被调用?
A:1.第0代对象充满 ---此为最常见
2.代码显式地调用System.GC的静态方法Collect()
3.Windows报告内存不足
4.CLR卸载应用程序域
5.CLR关闭
7:using语句有何作用?
1.引入命名空间
2.起别名
3.释放宝贵资源,相当于try{} finally { xx.Dispose(); }
使用其初始化一个变量,然后在与其匹配的大括号中访问此变量,编译器将自动产生一个try和一个finally语句块,在finally块中,编译器会产生将此变量转型为一个IDisposable接口,并调用其Dispose(),显然using只能用于那些实现了IDisposable接口的类型