listView刷新后,如何回收内存?
C# code
List<string> data = new List<string>();
private void Window_Loaded(object sender, RoutedEventArgs e) //程序加载后,给listView添加内容
{
for(int i=0;i<60000;i++)
{
this.data.Add(new string{i+"aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcv" });
}
listView.DataContext = data;
}
private void button_click(object sender, EventArgs args) //一个按钮的click事件的触发操作。
{
this.data.Clear();
this.listView.Items.Refresh();
}
上面的代码中,程序加载后,由于listView显示了60000个条目,因此内存占用很大,大概100多Mb。
但是当我点击按钮,触发了button_click()函数来清空listView后,内存占用依然没有降低下来。我该如何释放这些内存?
求代码。。
------解决方案--------------------
你这个方法有点过分哦
我说说我对C#内存管理的理解
系统内存 托管内存
当变量没有被引用时,会被GC回收,GC会把内存释放到托管堆
但是GC并不一定会将内存归还给系统
因为跟系统申请和释放内存是相对慢的,GC所托管的内存分配释放很快
这样GC在释放对象时会看一下情况,他觉得自己托管的内存不会对系统造成很大压力,就不会将内存归还给系统,所以你在任务管理器里面看到那个进程占用内存并没有减少
但是这样下次再分配内存的时候,就可以直接在托管堆上分配,不必跟系统申请,会快一些