程序不断运行,内存不断增加,性能不断下降。。有办法可以解决这个问题吗? 程序不断运行,内存不断增加,性能不断下降。。有办法可以解决这个问题吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是有非托管的资源没有及时释放有关系吧。或者你在循环中不断new大量对象有关。 C#不是有垃圾收集机制吗,应该不会内存不断增加啊。是不是有什么非托管的资源没有释放。还有一个可能是对象被保存在了一个数组或者Generic容器中,就没有办法被GC收集了。我们单位原来 有个程序用Enterprise library,就是这样。 嗯,同意,是不是new了很多小的对象又马上释放,这样GC会工作比较频繁。 对于connection这类实现了IDisposable接口的方法在不再使用的使用调用其Dispose()方法释放。对于流对象在不再使用的调用Close()对象关闭。 1. 自己创建对象能改造IDisposable就改造成IDisposable,多使用 using(object obj = new object){//todo} 2. 考虑多复用的最好用内存单例模式,不要总是new,注意单例模式的回收3. 尽量少使用static , 因为全生命周期里GC是不管static的 高人很多,收获很多very good! 垃圾处理啊一定是你new了太多对象又没有回收,特别是对于文件和数据库的操作 可能是对象没有关闭导致的,比如connection datareader dataset 等。查一下你的这些对象。 C#应该是有内存管理器的,可能是你的程序里面NEW的对象太多了吧,这样会频繁进行动态内存分配,而内存的释放不是及时的,这根内存管理器的算法有关。 大对象的分配;不恰当的保持根引号;不正确使用finalize方法 什么new 太多了没释放,我在一个方法里new再多,它的作用域也就是在这个方法里,垃圾回收也会回收掉的。如果内存稳定,问题不大。如果内存有增长趋势。考虑下是不是多线程操作时出现的问题。比如说一个线程锁住arraylist插入数据,另外一个线程没有加锁的前提下,读这个arraylist的数据,读取后清空这个arraylist的数据,这样就会导致内存增长。仅供参考。 用C#写的窗体程序,调试时出现“窗口类名无效”啥原因? 如何在单独的线程创建控件?不是在主线程,是自己启动的线程 .net超牛X的BUG,不服不行 c#如何模拟组合键(如ctrl+F) 请教一个在文本中替换数字的问题. 急用 C#中多个webbrowser如何不共享cookies 新人报道。。。请各位解决下偶的难题 各位真正的程序员,给我一个正确的答案___数据库操作(VS2005---C#) 因为界面的要求,要使用一个没有边框的Form,但是这样就没有办法拖动窗口了. 着急等待中... C#中有没有StringGrid之类的控件或可替代的? vs没有打包安装功能? 跪求上传压缩代码
或者你在循环中不断new大量对象有关。
是不是有什么非托管的资源没有释放。还有一个可能是对象被保存在了一个数组或者Generic容器中,就没有办法被GC收集了。我们单位原来 有个程序用Enterprise library,就是这样。
嗯,同意,是不是new了很多小的对象又马上释放,这样GC会工作比较频繁。
对于流对象在不再使用的调用Close()对象关闭。
using(object obj = new object){
//todo
}
2. 考虑多复用的最好用内存单例模式,不要总是new,注意单例模式的回收
3. 尽量少使用static , 因为全生命周期里GC是不管static的
一定是你new了太多对象又没有回收,特别是对于文件和数据库的操作
如果内存有增长趋势。考虑下是不是多线程操作时出现的问题。比如说一个线程锁住arraylist插入数据,另外一个线程没有加锁的前提下,读这个arraylist的数据,读取后清空这个arraylist的数据,这样就会导致内存增长。仅供参考。