1
我有一個程序使用ListView向用戶界面輸出大量數據。有時可能會填滿超過500MB的數據,但這不是我的問題。我的問題是,如果我嘗試通過listview.Items.Clear();
清除列表視圖中的項目,我的應用程序的內存消耗只會下降一小部分,然後坐在那裏。從一個全新的Windows窗體應用程序,只有一個列表視圖的內存示例:Listview清除內存並釋放內存
- 7,812K - 程序運行時未添加任何列表視圖項目。
- 26,816K - 分配給值「test」的50000個ListView項目填充
- 22,860K - 清除先前的50000個ListView項目後的內存。
內存值來自任務管理器。
我的問題是,listview.Items.Clear()並沒有釋放列表視圖項所佔用的所有內存,據我所知。
相關信息:在我的測試程序中,它包含的是帶有'details'視圖屬性和一列的ListView。
相關代碼:
public void Test()
{
for (int i = 0; i < 50000; i++)
{
listView1.Items.Add(new ListViewItem("test"));
}
}
private void listView1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
}
您是否在清除列表後提示GC.Collect()? – BlackBear
通常不建議調用GC.Collect(),因爲在某些情況下可能會導致性能問題。但是,如果您真的關心內存使用情況,並且沒有等待GC完成它的工作,請嘗試一下,看看它是否會影響您的應用程序。來源:http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx(在筆記下) – coolmine
GC.Collect()似乎解決了我的問題,但我一直聽到它有多糟糕,而且我不知道我不希望對我的計劃產生負面影響。有沒有其他方法可以銷燬/處理對象而不調用GC.Collect? – cloud