程序不断运行,内存不断增加,性能不断下降。。有办法可以解决这个问题吗?

解决方案 »

  1.   

    应该是有非托管的资源没有及时释放有关系吧。
    或者你在循环中不断new大量对象有关。
      

  2.   

    C#不是有垃圾收集机制吗,应该不会内存不断增加啊。
    是不是有什么非托管的资源没有释放。还有一个可能是对象被保存在了一个数组或者Generic容器中,就没有办法被GC收集了。我们单位原来 有个程序用Enterprise library,就是这样。
      

  3.   


    嗯,同意,是不是new了很多小的对象又马上释放,这样GC会工作比较频繁。
      

  4.   

    对于connection这类实现了IDisposable接口的方法在不再使用的使用调用其Dispose()方法释放。
    对于流对象在不再使用的调用Close()对象关闭。
      

  5.   

    1. 自己创建对象能改造IDisposable就改造成IDisposable,多使用
     using(object obj = new object){
    //todo

    2. 考虑多复用的最好用内存单例模式,不要总是new,注意单例模式的回收
    3. 尽量少使用static , 因为全生命周期里GC是不管static的 
      

  6.   

    高人很多,收获很多very good!
      

  7.   

    垃圾处理啊
    一定是你new了太多对象又没有回收,特别是对于文件和数据库的操作
      

  8.   

    可能是对象没有关闭导致的,比如connection datareader dataset 等。查一下你的这些对象。
      

  9.   

    C#应该是有内存管理器的,可能是你的程序里面NEW的对象太多了吧,这样会频繁进行动态内存分配,而内存的释放不是及时的,这根内存管理器的算法有关。
      

  10.   

    大对象的分配;不恰当的保持根引号;不正确使用finalize方法
      

  11.   

    什么new 太多了没释放,我在一个方法里new再多,它的作用域也就是在这个方法里,垃圾回收也会回收掉的。如果内存稳定,问题不大。
    如果内存有增长趋势。考虑下是不是多线程操作时出现的问题。比如说一个线程锁住arraylist插入数据,另外一个线程没有加锁的前提下,读这个arraylist的数据,读取后清空这个arraylist的数据,这样就会导致内存增长。仅供参考。