c# 做的C/S程序,在占的内存资源如何释放掉? 15

我有用using和托管对象dispose但是我在观察程序占用内存占用时发现:当我点击“查询所有”按钮时,内存就会增加,点越多,增加越多。查询的数据库操作对象我全部usin... 我有用using 和托管对象dispose

但是我在观察程序占用内存占用时发现:
当我点击“查询所有”按钮时,内存就会增加,点越多,增加越多。
查询的数据库操作对象我全部using了。。。

请问这样内存占用的情况正常吗?如果不正常,如何通过代码进行管理?
展开
 我来答
2sws
2009-09-23 · TA获得超过381个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:148万
展开全部
朋友你问的很好,对于你提出的问题,我是这样想的。
C# 内存管理是基于优化的收集方式,引入了代的机制(共分3代0、1、2),当0代充满时或内存紧张时,垃圾收集器会挂起当前线程自动收集0代没有被引用的新建的对象,1代充满时收集1代,2代充满时收集2代。
见意最好不要手动进行GC的收集,这样会带来不必要的系统资源的浪费。
如果不进行人工干预内存太大的话,才可以使用手动回收GC.Collect()进行回收。
这个方法有2种参数
一种是:
GC.Collect() 这种方法对所有的代进行回收
一种是:
GC.Collect(int) 这种方法对0、1、2代,指明的代进行回收。

在这里,我见意在程序运行时监控一下内存占用量,如果一直持续占用内存很大而且没有减少的意思的话你可以使用手动的方法进行内存回收。
如果是间歇性的内存占用大的话,我不见意手动进行回收。因为,会占用资源。

还有一点要注意,在使用的类型含有Dispos()方法或Close()方法时,使用using或try{} finally{}进行释放,如果没有进行有效释放的话,会导制对象进行二次回收,也就是对象要回收两次才可以被真正的释放掉内存。如果第一次对象没有被释放掉,对象会对GC从0代放入1代,这样的话,回出现很长时间内存占用量很大。

最后祝你学业有成。 呵呵。。 在学习的路上只要有坚持的信念,就一定会得到很好的回报。
老级幸1286
2009-09-23 · TA获得超过511个赞
知道小有建树答主
回答量:756
采纳率:0%
帮助的人:386万
展开全部
晕,楼上的说的这么啰嗦。
你这样做就可以了。
你查询所有是不是返回了一个DataSet,你想啊,你每次单击都去创建一个DataSet肯定了。
你把DataSet定义为全局的。
每次查询时ds.Clear()一次,然后再给DataSet赋值,就不会了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
柴关贵深0m
2009-09-22 · TA获得超过1142个赞
知道小有建树答主
回答量:1270
采纳率:0%
帮助的人:0
展开全部
GC.Collect();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式