我首先定义了一个类,这个类申请了100M的空间
class TestClass
{
public byte[] abc = new byte[1024 * 1024 * 100]; public TestClass()
{
} public void Test()
{
abc = new byte[1024 * 1024 * 100];
GC.Collect();
}
}然后我创建了两个窗体,每当点击创建新窗体时,就调用该类
private TestClass tc = new TestClass();
private void Form2_Load(object sender, EventArgs e)
{
tc.Test();
}不停的关闭打开第二个窗口,每次内存都增加100M,而且没有减少,我在关闭窗口之后,调用了Dispose来销毁这个窗口,但是tc这个对象好像一直没有销毁,不知道tc应该在什么时候销毁,还是需要手动销毁该对象?
class TestClass
{
public byte[] abc = new byte[1024 * 1024 * 100]; public TestClass()
{
} public void Test()
{
abc = new byte[1024 * 1024 * 100];
GC.Collect();
}
}然后我创建了两个窗体,每当点击创建新窗体时,就调用该类
private TestClass tc = new TestClass();
private void Form2_Load(object sender, EventArgs e)
{
tc.Test();
}不停的关闭打开第二个窗口,每次内存都增加100M,而且没有减少,我在关闭窗口之后,调用了Dispose来销毁这个窗口,但是tc这个对象好像一直没有销毁,不知道tc应该在什么时候销毁,还是需要手动销毁该对象?
解决方案 »
- c#导出Excel里面设置单元格问题
- 小弟新手请教大神们帮忙看看怎么用C#做登录到oracle
- 简单数据库操作问题??
- 在写web程序时候,如何让客户端执行一个本地的exe??
- 急!请高手帮忙
- 如何去做,今天结帖
- C# 入门问题 InitializeComponent()起到什么作用
- 如何约束DataTable中某列的值不能重复??等待答复
- 例如鼠标指向 文件载入 下面手指就绪就变成文件载入,鼠标指向别的就绪也随之改变。用C#在winform中如何实现这个效果。
- 实在没分了求教listView用法
- c# 连接池有个2个参数不明白,请高手给解释一下谢谢
- 接分啦,指教、帮顶都有分!一个简单是问题,Mapx如何改变鼠标模式?
GC.Collect();
{
abc = new byte[1024 * 1024 * 100];
//GC.Collect();
}不用回收,也不会一直上升,只占用200M,不会更多.
系统自动做了回收
如果你不打算在那个类里释放,而是在类的外部调用GC.Collect() 的话,你也要在tc=null之后调用才有效。如果你不主动调用GC.Collect(); 来释放内存的话,很可能会出现你那种情况,内存不断增长。不过那不代表不能被回收了,之后你随时可以通过两次调用GC.Collect() 来释放增长的大量内存使用。为什么要调用两次GC.Collect() 呢,因为当第一次调用后,回收了Form2占用的资源,使得Form2内部的tc不可到达了,第二次才真正回收了tc占用的资源。
GC,通往自由的大道
http://blog.csdn.net/gisfarmer/archive/2009/02/24/3932444.aspx和另外一个CSDN GC讨论贴http://topic.csdn.net/u/20090303/22/3e989573-7dae-4689-9bf2-d0deae2d263e.html
说的很有道理,是我自己的问题,如果将tc=null,那么这块的内存就会回收回去,内存就不会在增长了,谢谢!