小编Xeg*_*ara的帖子

C#中的垃圾收集没有进行.为什么?

我尝试过一个简单的实验来验证垃圾收集器的功能.引用3.9关于.NET中自动内存管理的自动内存管理(MSDN).对我来说,它听起来像是C++中的共享指针.如果对象的引用计数器变为零,则它将被垃圾收集器解除分配.

所以我尝试在主窗体中创建一个函数.该函数在我的主窗体的Shown事件函数内调用,该函数在构造函数之后执行.这是实验代码.

    public void experiment()
    {
        int[] a = new int[100000];
        int[] b = new int[100000];
        int[] c = new int[100000];
        int[] d = new int[100000];

        a = null;
        b = null;
        c = null;
        d = null;
    }
Run Code Online (Sandbox Code Playgroud)

以下是结果:

在内存分配之前

http://i.stack.imgur.com/ZhUKc.png

内存分配后

http://i.stack.imgur.com/NyXJ6.png

在离开功能范围之前

http://i.stack.imgur.com/MnTrm.png

离开功能范围后

http://i.stack.imgur.com/MiA6T.png

为什么垃圾收集器即使在设置为null之后也不释放由数组a,b,c,d分配的内存?

.net c# garbage-collection memory-management

24
推荐指数
5
解决办法
7311
查看次数

3
推荐指数
1
解决办法
666
查看次数