日期:2014-05-18  浏览次数:20427 次

析构函数什么时候被调用
namespace ForexDatasource.temp
{
  public partial class WebForm1 : System.Web.UI.Page
  {
  protected void Page_Load(object sender, EventArgs e)
  {
  aa a = new aa();
  }
  }

  public class aa
  {
  public aa()
  {
  int i = 0;
  }

  ~aa()
  {
  int i = 0; //我在这个地方设了一个断点,打开和关闭页面都没有执行到这儿,为什么?
  }
  }
}



------解决方案--------------------
1,GC(.net框架自自动托管垃圾回收也就是调用了析构函数)
2,对于一些独占的,很宝贵的资源,建议显示调用调用
------解决方案--------------------
析构函数只有在GC回收时才调用,你在调试环境是无法跟踪到的...

析构函数在.NET中没有多大意义,不建议使用...对于需要及时释放的资源应使用IDisposable接口...
------解决方案--------------------
LS都说了,
我想说的是楼主如果一定要测试的话是可以的!!
页面加一个Button,Button的click打一句代码;
程序改成这样:
public partial class Default7 : System.Web.UI.Page
{
aa a;
protected void Page_Load(object sender, EventArgs e)
{
a = new aa();
}
protected void Button1_Click(object sender, EventArgs e)
{
GC.SuppressFinalize(a);//执行垃圾清理,但并不马上执行,看系统的情况
}
}

public class aa
{
public aa()
{
int i = 0;
}

~aa()
{
//int i = 0; //我在这个地方设了一个断点,打开和关闭页面都没有执行到这儿,为什么? 
}


端点设在~aa()下的花括号上,
可这样试验,启动,多按几次button,退出再启动,反复来几次总有一次会执行到断点!!
------解决方案--------------------
.net 不能用c++的方式开发的