首页 新闻 会员 周边 捐助

一个有关资源释放的问题,各位,帮帮忙

0
悬赏园豆:10 [已解决问题] 解决于 2013-03-05 09:08

大致代码如下

1 while(true)
2 {
3     Class1 class1=new Class1();
4     ……//class里的操作,执行完成后需要等待大概2分钟后会有回调方法,在这里不会等待回调方法的相应
5      Thread.Sleep(1000);
6 }

这种情况下,class1会不会自动释放,
类似:一个人(class1),让他儿子(class1里的方法)去叫张三,让张三把李四叫来,一会,儿子回来了,告诉这个人说,已经传到话了,然后就到了sleep这里,又过了一会李四来了

 

这种情况会不会自动释放class1

冰封一夏的主页 冰封一夏 | 初学一级 | 园豆:13
提问于:2012-12-24 15:47
< >
分享
最佳答案
0

class1对象,只要有引用就不会成为垃圾,你的 class1 调用方法,方法里可能调用 别的方法, 这些都会保持对它的引用。

class1是托管资源,每次 循环都会创建新的,原来的 还是在托管堆中,只是没有 直接的变量 指向它。

托管资源 要靠GC来回收,不要 强制回收,靠GC的话,我们不用管, 不晓得它什么时候回收。

收获园豆:10
Qlin | 老鸟四级 |园豆:2403 | 2012-12-24 16:42

麻烦详细点,我在while循环加了gc  但是还是不行

冰封一夏 | 园豆:13 (初学一级) | 2013-01-04 16:28

@冰封一夏: 

回收是 异步的,也要时间的。在循环里gc的话,先 要将强引用 移除

            while(true)
            {
               Class1 class1=new Class1();
                ……//class里的操作,执行完成后需要等待大概2分钟后会有回调方法,在这里不会等待回调方法的相应
               Thread.Sleep(1000);
               //强制执行垃圾回收 
               class1 = null;
               GC.Collect();
               GC.WaitForPendingFinalizers();
            }
Qlin | 园豆:2403 (老鸟四级) | 2013-01-04 16:56
其他回答(3)
0

c#定义的变量是有块级作用域的也就是我们常说的{}

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-24 15:49
0

唉,GC。希望有帮到你。

写代码的小2B | 园豆:4377 (老鸟四级) | 2012-12-24 15:59
0

只有你这个进程关闭他才会释放,否则不会释放。建议自己手动释放吧

茂茂 | 园豆:2894 (老鸟四级) | 2012-12-24 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册