C# 自定义类 dispose 释放类对象
我有个简单的类,是测试的classUser{publicstringuname;publicstringupwd;publicstringr1;publicstringr...
我有个简单的类,是测试的
class User
{
public string uname;
public string upwd;
public string r1;
public string r2;
}
比如这个类,我用循环创建1000个对象,并给属性赋值,此时内存会涨到不少,我想问怎么将这些对象释放掉,让内存恢复呢? 展开
class User
{
public string uname;
public string upwd;
public string r1;
public string r2;
}
比如这个类,我用循环创建1000个对象,并给属性赋值,此时内存会涨到不少,我想问怎么将这些对象释放掉,让内存恢复呢? 展开
4个回答
展开全部
C#不用主动调用回收,运行时会帮你干这个事儿。
运行时回收内存的标准是“没有任何引用”
dispose释放对象的话,一般用于关闭一些带状态的连接、做一些构造对应的结束动作,并且“清除引用”
如果要主动调用内存回收,请查GC类库。或者直接调用GC.Collect()。它会在你调用的时候执行内存回收。也就是“回收[没有任何引用]的变量所对应的内存”。
追问
什么时候才会被认为是没有任何引用啊,我的目的其实很简单 就是这些对象我用完了,看能不能让内存降下来
追答
没有引用恰好就表示你没有任何办法看到它了
我以前也纠结过这个问题,想说用一个检测一个对象。可是我能检测到它就代表它还有引用呀~
所以这个不需要证明什么噢
要看的话,可以用系统的检测工作,查看应用程序损耗的内存等资源的变化吧
展开全部
CLR可以自动进行垃圾回收。当对象没有被引用,CLR自动会将其视为垃圾,并回收内存。
一般情况,dispose是用来释放对象使用的资源,如:文件、数据库连接等。
一般情况,dispose是用来释放对象使用的资源,如:文件、数据库连接等。
追问
什么叫没有被引用? 就上面的例子详细帮我解释下哈
追答
这个不太好说。
我从网上找了些图。
过程相当于:
User a=new User();
a=new User();
可以参考:http://www.cnblogs.com/chenzehe/archive/2009/01/24/1380609.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象不被使用时GC会自动回收的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用List<User>来添加创建的对象实例
调用remove或者removeat来清除不用的对象
User us;
List<User> Users=new List<User>;
For (int i=1;i<1001;i++)
{
us=new User());
Users.add(us)
}
For(int i=1;i<Users.Count+1;i++)
{
Users.RemoveAt(i);
}
调用remove或者removeat来清除不用的对象
User us;
List<User> Users=new List<User>;
For (int i=1;i<1001;i++)
{
us=new User());
Users.add(us)
}
For(int i=1;i<Users.Count+1;i++)
{
Users.RemoveAt(i);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询