概要
1.1 概述
c# 内存自动回收,那么触发回收一定是有条件的,且定周期的监测也是一个方面。
那么内存回收的必要条件是什么呢:对象成为了垃圾对象,什么样的对象是垃圾对象呢,对象不会被别人使用了,地址==null就是这样的一个条件,但不是唯一条件。
满足了必要条件,也不一定会调用,我们能做的也仅仅就是把一个对象变成垃圾对象。且主动调用一次,那么主动调用了为什么不能马上释放呢,需要一个系统给他的时机,所以需要等。
那么现在总结一下,内存回收有一个必要条件,两个非必要条件
必要条件:对象成为垃圾对象
非必要条件:1.系统认为需要做内存回收的时机,我们主动调用了内存回收的函数。
1.2 摘要
1.2.1 内存回收并告诉系统,这个对象我已经回收完内存了,系统不用再去回收了
GC.Collect();
GC.SuppressFinalize(this);
1.1.2 内存回收并等待
GC.Collect();
GC.WaitForPendingFinalizers();
代码
using System;
namespace 内存释放试验2
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("内存释放试验2");
A a = new A();
a = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.ReadKey();
}
class A
{
~A() {
Console.WriteLine("析构函数");
}
}
}
}
运行结果
附录
https://www.cnblogs.com/mq0036/p/3707257.html
https://blog.csdn.net/weixin_30640769/article/details/94905644