昨天做了一个试验,初始化了一个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("清处完毕");
}
}
开始占有内存
初始化后
.net由于是托管程序,会自动照顾垃圾回收。你也可以手动调用GC,不过具体的回收时间仍然不确定
非常详细的参考文章传送门
http://blog.csdn.net/sykpboy/archive/2005/04/11/342971.aspx
ps:除非你还在用1.1,否则请放弃HashTable
有垃圾回收机制. 不过手动调用GC进行垃圾回收. 会很消耗性能,
手动回收: GC.Clo...(名称不记得了)
你可以在
hstable.Clear();
之后,主动要求系统清理内存,指令为:
GC.Collect();
考虑用stop或dispose(),或则手动强制回收:gc.collect()。最好先理解下.net下的GC托管堆~不然即使强制回收也是不知道什么时候才真正回收完成。