当前位置:编程学习 > C#/ASP.NET >>

如何强制释放已使用的对象

最近做一个winform项目,由于是远程连接数据库,为了减少查询数据库的次数,我把数据导入到业务层的一个静态对象集合,此集合作为上层查询的数据源,以后每次查询,先判断是否更新,如果没更新就直接从这个静态对象集合中查询。为了避免上层对次静态对象的直接引用,我在每次调用时都先做一次深度复制,即新开一个集合实例,这时候问题就来了,因为每一次深度复制都会创建一个新的实例,尽管这样避免了数据源(静态对象集合)被直接引用,但是每次查询都会创建一个实例,这样时间长了担心会消耗过多的资源,我是在静态类中执行这样的操作,程序运行过程中,此静态类作为业务层关键类是不会被dispose的,随着查询次数增多,实例会越开越多,有什么办法能强制释放已使用的对象? --------------------编程问答-------------------- http://blog.csdn.net/xmsheji/archive/2010/01/11/5175852.aspx --------------------编程问答--------------------   这个问题可以从另外一个角度考虑,比如单件模式。不仅仅是释放对象的问题。 --------------------编程问答-------------------- 没有引用指向的对象,会在垃圾回收的时候回收。
如果类实现了IDispose接口,需要手工调用,没有实现此接口。不用管,如果分配次数多,释放不即时,那可以考虑调用gc.collect,但注意不要频繁调用,放在一个不常执行的地方。比如窗体释放。 --------------------编程问答-------------------- dispose() --------------------编程问答-------------------- c++ 中强制释放的可以参考一下. --------------------编程问答-------------------- 我的看法如下:

1、既然设计成静态类,最好直接从静态内中去取数据,这样结构更加清晰,楼主把数据再实例成一个类,这种设计有没有必要,请多考虑;

2、多次实例化,其实是不必担心内存过多的消耗。因为.Net的垃圾回收机制会自动对垃圾进行处理。当然,垃圾回收的时间是系统控制的,你也可以自己强行调用GC.Collect()进行回收,但这样频繁调用,会产生较大的系统开销,不推荐;

3、在你的实例内中实现IDispose接口,把实例的调用包含在using代码块中,这样就可以及时释放实例的资源,或者直接调用实例的IDispose进行销毁。

好的办法,请参考第一条意见。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,