夥計們我在C#中有一個簡單的Windows窗體應用程序。它只有2個表格。一個表格只有一個按鈕,而另一個表格有一個DataGridView
和一個按鈕。請看看這兩種形式的代碼:內存不是由DataGridView發佈的?
代碼Form1
,有一個按鈕顯示Form2
。的Form2
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void showFrom2_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
}
代碼,其具有被填充GUID在一次測試10K行的DataGridView
。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void populateGrid_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
for (int i = 0; i < 10; i++)
{
dt.Columns.Add(i.ToString());
}
for (int j = 0; j < 10000; j++)
{
DataRow row = dt.NewRow();
for (int k = 0; k < 10; k++)
{
row[k] = Guid.NewGuid().ToString();
}
dt.Rows.Add(row);
}
dataGridView1.DataSource = dt;
}
private void closeForm2_Click(object sender, EventArgs e)
{
dataGridView1.Dispose();
this.Close();
}
現在,每當我填充DataGridView
然後關閉Form2
。內存不被釋放。如果我在不關閉整個應用程序的情況下繼續填充網格並關閉「多個」時間,則系統內存不足(我有1 GB RAM)。致電dataGridView1.Dispose();
不應該GarbageCollector
做他的工作,並釋放內存?
我想要的是,只要我關閉Form2
,內存就應該在系統中釋放。
注意:我通過TaskManager
來監視內存(我知道它沒有顯示正確的內存消耗量,但無論如何,因爲內存不足會導致內存不足。不被釋放)。我甚至試圖在關閉按鈕上撥打GC.Collect()
(這不是一個好的電話,它也沒有幫助)。
此外,如果有人能告訴我如何監控應用程序的「真實」消費,我將不勝感激。我在某處閱讀過使用.Net性能計數器的地方。那是什麼?
P.S.不要問爲什麼我用10k行填充網格。我只是爲了測試目的而做它。
是的,我認爲內存限制是原因。 – NewbieProgrammer