2012-07-03 27 views
0

我有一個未綁定的datagridview有175列和50,000行,主要用雙打填充。根據我的計算,這相當於175 * 50000 * 8字節= 70 MB的內存使用量。但是,任務管理器表示該網格正在使用大約1.2 GB的內存 - 17倍的開銷!任何人都可以解釋爲什麼它消耗這麼多的內存?Datagridview過多的內存使用情況

從關於縮放datagridview(http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx)的msdn文章中,我不認爲我在做任何明目張膽的錯誤。我沒有爲單個單元格設置樣式或contextmenus。除了在列級別填充單元格值和設置格式字符串以外,不進行任何修改。

據我所知,虛擬模式或共享行可能會減少內存消耗,但考慮到我上面的計算,我不認爲這是必要的。 17倍的開銷不適合我。

回答

2

請記住,DataGridView的每個單元都包含一個DataGridViewCell實例,其中包含約33 properties。它的價值遠高於double的價值。

+0

所以,即使我從未綁定切換到綁定,它不會做很多,因爲單元格仍然具有所有這些屬性?虛擬模式能解決這個問題嗎 – Tekito

1

您的計算基於包含8個字節的System.Double。底層System.Data.DataTable中每個單元的值可能有8個字節,但這並不意味着DataGridView中的相同數據量僅爲8個字節。

每個單元格都有多個屬性 - 高度,寬度,邊框樣式,邊框顏色等。即使這些屬性都處於默認值,這些默認值也會佔用內存。