有个class A,其中有个成员函数M,我new了个Thread,用while(true)一直死循环执行A.M(),这个占用内存一直很稳定。有个class B,其中有个静态函数JT,我new了个Thread,用while(true)一直死循环执行B.JT(),内存占用就持续上升。
我也试过Thread只执行一遍B.JT(),在JT内部用while(true)死循环,内存也是持续上升。
JT()功能是对数据库不完善的数据,做一些补充的操作。用了using,应该不是数据库操作对象的问题。难道静态函数一直会这样持续的占用内存吗?

解决方案 »

  1.   

    其实也不是静态函数占用内存,而是静态函数的生命周期是跟随程序域的,程序没退出,它便一直占用着不被系统回收,所以不断新增此类对像时,所占内存当然持续增长。------------
    [店家乐服装店收银软件,服装店销售软件,服装收银软件,服装销售管理系统]_http://www.djlsoft.net 
      

  2.   

    和静态函数无关,JT函数内部没有及时释放内存,先把占用内存的变量清了,比如DataSet,DataTable之类的,先调用Clear方法然后把引用设置为null,然后用GC.Collect回收内存,
      

  3.   

    如果有对象有Dispose方法的,也要调用,释放非托管资源,
      

  4.   

    静态函数的内部有资源未释放造成的定义为null 或调用Dispose()方法释放
      

  5.   

    静态函数内部,我觉得没什么问题,就是用NHibernate对数据进行修改而已static AAA aaa = new AAA();// 网站访问类函数内部实现如下:
    using (session的一个对象)
    {
     // List = 从数据库查询数据
     // foreach循环List,将每条记录的“到达时间” = aaa.查询到达时间("")
     // begin事务,将修改后的记录保存,commit事务
    }
      

  6.   

    谢谢各位了,经测试,是公司提供给我的NHibernate封装对象,初始化的一个问题,导致using没有释放资源