首页 新闻 会员 周边

C#如何释放内存

0
悬赏园豆:20 [已关闭问题]

昨天做了一个试验,初始化了一个900W的Hashtable看一下,他点用的内存,初始化后由原来的18M讯速涨到479M,本来想用.Clear()就以为可以释放内存,发现,不可以,请高手指点

界面如下:

程序如下:

代码
public partial class Form1 : Form
{
private Hashtable hstable = new Hashtable();
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
double count =Convert.ToDouble(textBox1.Text.Trim());
hstable.Clear();
for (double i = 0; i < count; i++)
{
hstable.Add(i, i);
}
MessageBox.Show(
"初始化完毕");
}

private void button2_Click(object sender, EventArgs e)
{
if (hstable.Contains("xiaolg") == false)
{
hstable.Add(
"xiaolg", "ssssssssssssssssss");
}
else
{
MessageBox.Show(
"已存在");
}
}
private void button4_Click(object sender, EventArgs e)
{
hstable.Clear();

MessageBox.Show(
"清处完毕");
}
}

开始占有内存

初始化后

乱码人生的主页 乱码人生 | 初学一级 | 园豆:135
提问于:2010-01-24 10:56
< >
分享
其他回答(3)
0

.net由于是托管程序,会自动照顾垃圾回收。你也可以手动调用GC,不过具体的回收时间仍然不确定

非常详细的参考文章传送门

http://blog.csdn.net/sykpboy/archive/2005/04/11/342971.aspx

ps:除非你还在用1.1,否则请放弃HashTable

紫色永恒 | 园豆:844 (小虾三级) | 2010-01-24 13:54
0

 有垃圾回收机制.   不过手动调用GC进行垃圾回收.  会很消耗性能, 

手动回收: GC.Clo...(名称不记得了)  

 

不若相忘于江湖 | 园豆:51 (初学一级) | 2010-01-25 14:16
0

你可以在

hstable.Clear();

之后,主动要求系统清理内存,指令为:

GC.Collect();

JavaCS | 园豆:213 (菜鸟二级) | 2010-01-25 19:17
0

考虑用stop或dispose(),或则手动强制回收:gc.collect()。最好先理解下.net下的GC托管堆~不然即使强制回收也是不知道什么时候才真正回收完成。

szXiaoWang | 园豆:205 (菜鸟二级) | 2010-01-31 23:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册