private void Work()
{
DataTable  dt = EbzonLibrary.Enterprise.LoadNonCheckedUrl();//加载数据 一次20条 从数据库取
StringBuilder sb = new StringBuilder();
foreach(DataRow dr in dt.Rows)
{
string id = dr["ID"].ToString();
sql = " update ProductSeries set UrlOpen ='N' where ProductSeriesID='"+id+"' ";
sb.Append(sql);
}if(sb.ToString().Length > 10)
{
int result = EbzonLibrary.SimpleSqlHelper.ExecuteNonQuery(sb.ToString());//执行更新
sb = new StringBuilder();
lblRun.Text = DateTime.Now + "成功更新"+result;
}
dt = null;
Work(); //重复调用
}这是一个简单的程序,但我不知道不什么运行起来,内存从几十K一直 上升到 200多MB,目前还在增加!
数据库链接之类的资源也都关闭了!
我不知道什么原因导致! 个人感觉 是 DataTable dt ,感觉每次加载20条数据 就会在内存中 累积!这样一直上升!
但后来在该方法未 将 dt = null;似乎也不起作用!哪个前辈来指点一下!为谢

解决方案 »

  1.   

    我没看错的话,貌似是递归,而且没有终止条件。
    private void Work()
    {
        ...
        Work();
    }
      

  2.   

    dt = null;
    ---------------
    你以為這樣就釋放資源了?使用dt.Dispose()
      

  3.   

    最好有些地方显示的Dispose()  
      

  4.   

    没有终止条件的无限递归,不出事才有鬼...你需要无限的话,为什么不用死循环呢?最后一句去掉然后调用的时候 
    while(true)
    {
    Work();
    }对需要一直执行的情况,不要用递归,虽然你没有参数没有返回值,不会很快造成堆栈溢出,但是迟早要挂的....