gpt4 book ai didi

.net - GC.COllect() 似乎在 Debug模式下不起作用

转载 作者:行者123 更新时间:2023-12-01 09:11:21 25 4
gpt4 key购买 nike

我正在运行下面的代码,结果在 Release模式下运行时完全不同。在 Debug 模式下,它从不收集 A 类的对象,而在 Reaelse 模式下,它立即收集 A 类的对象。

谁能解释一下原因。

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2 {
class Program
{
static void Main(string[] args)
{
A obj = new A();

B bobj = obj.objB;

GC.Collect();
GC.WaitForPendingFinalizers();

while (bobj.isLive)
{
Console.WriteLine("Is Alive!!");
}

Console.WriteLine("Is Dead!!");

Console.ReadLine();
}
}

class A:IDisposable

{
public B objB = new B();

public A()
{ }

~A()
{
objB.Dispose();
}

#region IDisposable Members

public void Dispose()
{
GC.SuppressFinalize(this);
}

#endregion


}
class B:IDisposable
{
public bool isLive = true;

#region IDisposable Members

public void Dispose()
{
this.isLive = false;
GC.SuppressFinalize(this);
}

#endregion
} }

最佳答案

在 Debug模式下,编译器不会优化局部变量。因此,对 A 的引用仍然存在。在Release模式下,编译器优化了使用,使得引用被丢弃,对象可以被回收。

关于.net - GC.COllect() 似乎在 Debug模式下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/755680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com