В C#, я называю GC.Collect()
в обоих Form1_Load
и нажмите событиеТаблица данных выбрасывайте время
Вопрос не GC.Collect()
кажется сделали ничего в Form_load
Но работает в случае щелчка. Зачем ?
GC.Collect()
first time inForm1_Load
GC.Collect()
second time inclick event
С Visual Studio 2015 диагностики инструмента
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dt;
private void Form1_Load(object sender, EventArgs e)
{
dt = new DataTable();
dt.Columns.Add("1", typeof(int));
dt.Columns.Add("2", typeof(int));
dt.Columns.Add("3", typeof(int));
for (int i = 0; i < 1000000; i++)
{
DataRow dr = dt.NewRow();
dr[0] = 10;
dr[1] = 1000;
dr[2] = 10000;
dt.Rows.Add(dr);
}
//gc first time
dt = null;
GC.Collect();
}
private void button1_Click(object sender, EventArgs e)
{
//gc sec time
dt = null;
GC.Collect();
}
}
Что вы пытаетесь достичь? Почему вы вызываете 'GC.Collect();'? – Irshad
Пытаться удалить данные и получить память сразу – MaxJ
Класс DataTable датируется .NET 1.0, когда Microsoft еще не так ясно представляла. Он наследует от MarshalByValueComponent, раннего дизайна дизайна quirk. Это дает ему финализатор, несколько особенный, поскольку он ничего не делает. Помимо сохранения памяти, занятой в первом вызове GC.Collect(). Он требует двух с вызовом GC.WaitForPendingFinalizers() между ними. Другой способ сделать это - сначала вызвать dt.Dispose(). Не делай этого. –