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.   

    1,GC(.net框架自自动托管垃圾回收也就是调用了析构函数)
    2,对于一些独占的,很宝贵的资源,建议显示调用调用
      

  2.   

    析构函数只有在GC回收时才调用,你在调试环境是无法跟踪到的...析构函数在.NET中没有多大意义,不建议使用...对于需要及时释放的资源应使用IDisposable接口...
      

  3.   

    析构函数在C#里没什么用..GC会自动帮你清理的
      

  4.   

    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,退出再启动,反复来几次总有一次会执行到断点!!
      

  5.   

    谢谢各位,不过还是有问题。    public partial class WebForm1 : System.Web.UI.Page 
        { 
            protected void Page_Load(object sender, EventArgs e) 
            { 
               comData mydata = new comData( "forexds" ); 
    //数据库操作
            } 
        }  public class comData
    {
    public System.Data.OleDb.OleDbConnection myConn;
    public static string connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}../database/{1}.mdb;User Id=admin;Password=;"; public comData( string dbname )
    {
    myConn = new System.Data.OleDb.OleDbConnection();
    myConn.ConnectionString = string.Format( connstr, System.AppDomain.CurrentDomain.BaseDirectory, dbname );
    myConn.Open();
    } ~comData()
    {
    if( myConn != null && myConn.State != ConnectionState.Closed )
    myConn.Close(); myConn = null;
    }
    //其它方法
    }    } 我的本意是,代码结束后,系统自动调用析构函数~comData(),销毁Page_Load中的mydata,关闭数据库。
    可是实际上,我打开页面,然后关闭页面,~comData()一直没有被调用。数据库一直开着,被打开的ACCESS数据库有一个ldb临时文件一直都在。
    我现在用的方法就是在Page_Load中手动销毁mydata,关闭数据库,但是觉得不规范,也麻烦,每个页面中都要写。请高手指点:1. ~comData()为什么没有被调用? 2. 是不是我的总思路有问题?
      

  6.   

    .net 不能用c++的方式开发的