大致代码如下
1 while(true) 2 { 3 Class1 class1=new Class1(); 4 ……//class里的操作,执行完成后需要等待大概2分钟后会有回调方法,在这里不会等待回调方法的相应 5 Thread.Sleep(1000); 6 }
这种情况下,class1会不会自动释放,
类似:一个人(class1),让他儿子(class1里的方法)去叫张三,让张三把李四叫来,一会,儿子回来了,告诉这个人说,已经传到话了,然后就到了sleep这里,又过了一会李四来了
这种情况会不会自动释放class1
class1对象,只要有引用就不会成为垃圾,你的 class1 调用方法,方法里可能调用 别的方法, 这些都会保持对它的引用。
class1是托管资源,每次 循环都会创建新的,原来的 还是在托管堆中,只是没有 直接的变量 指向它。
托管资源 要靠GC来回收,不要 强制回收,靠GC的话,我们不用管, 不晓得它什么时候回收。
麻烦详细点,我在while循环加了gc 但是还是不行
@冰封一夏:
回收是 异步的,也要时间的。在循环里gc的话,先 要将强引用 移除
while(true) { Class1 class1=new Class1(); ……//class里的操作,执行完成后需要等待大概2分钟后会有回调方法,在这里不会等待回调方法的相应 Thread.Sleep(1000); //强制执行垃圾回收 class1 = null; GC.Collect(); GC.WaitForPendingFinalizers(); }