C# 程序占用了太多内存

C# 程序占用了太多内存,c#,C#,我将数据库中的30行(路径中的文本和图像)加载到dataGridView中。每个图像的大小约为45-60kB。 当我的程序运行时,它使用30mb的RAM。如果我按按钮3\u单击\u 2(加载接下来的30行),它将使用+20mb内存,每次。。。 我怎样才能解决我的问题 private void Form1_Load(object sender, EventArgs e) { SQL.Data_from_DB(0); //Load data from DB into Lists Loa

我将数据库中的30行(路径中的文本和图像)加载到dataGridView中。每个图像的大小约为45-60kB。 当我的程序运行时,它使用30mb的RAM。如果我按
按钮3\u单击\u 2
(加载接下来的30行),它将使用+20mb内存,每次。。。 我怎样才能解决我的问题

 private void Form1_Load(object sender, EventArgs e)
 {
  SQL.Data_from_DB(0); //Load data from DB into Lists 
  LoadTable();    //Load data from Lists into DataGridView
 }




WinForms应用程序使用大约40 MB的内存显示一组图像,这一点也不少见。你真的有内存不足的错误吗?程序崩溃了吗?这里的问题是什么?可能的重复看起来就像每次加载一组30行的新数据时都试图抛出旧数据。如果是这样的话,那将是对您为旧的30行分配的所有图像调用Dispose()的好时机。您的图像是图标,对吗?因为这是一个非常小的位图大小-这是windows唯一可以显示的东西。如果这些是jpg,则会在加载时扩展为位图。你们的内存到了。@CodyGray我并没有任何错误,但在第四次点击按钮后,它使用了120mb,以此类推。。。在DataGridView中,每次点击都会有30幅图像在变化。
 public void LoadTable()
    {
        dataGridView1.Rows.Clear();
        VS.count_list = 0;
        for(int i = 0; i< 30; i++)
        {
            dataGridView1.Rows.Add();
            dataGridView1.Rows[VS.count_list].Cells[0].Value = UnixTimeStampToDateTime(Convert.ToInt32(SQL.Date[i], 10));
            dataGridView1.Rows[VS.count_list].Cells[1].Value = SQL.Text[i];
            dataGridView1.Rows[VS.count_list].Cells[2].Value =SQL.Likes[i];
            dataGridView1.Rows[VS.count_list].Cells[3].Value = SQL.Reposts[i];
            if (SQL.Image[i] != "-")
            {
                try
                {
                    dataGridView1.Rows[VS.count_list].Cells[5].Value = LoaDimg(SQL.Image[i]);
                }
                catch
                {
                    dataGridView1.Rows[VS.count_list].Cells[5].Value = null;
                }
            }
            else
            {
                dataGridView1.Rows[VS.count_list].Cells[5].Value = null;
            }
            VS.count_list++;  
        }
    }
 private Image LoaDimg(string path)
        {
        Bitmap bitmap = new Bitmap(Directory.GetCurrentDirectory() + "\\1\\" + path + ".jpg");
        return bitmap;
    }
 public static void Data_from_DB(int inp_num)
 {
        using (SqlConnection connection = GetConection())
        {
            string query = "SELECT * FROM [Table] WHERE Id BETWEEN @start AND @end";
            SqlCommand command = new SqlCommand(query, connection);
            command.Parameters.AddWithValue("@start", inp_num + 1);
            command.Parameters.AddWithValue("@end",   inp_num + 30);
            connection.Open();
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read()) { 
                    Date.Add((String.Format("{0}", reader["Post_Date"].ToString())));
                    Text.Add((String.Format("{0}", reader["Post_Text"].ToString())));
                    Likes.Add((String.Format("{0}", reader["Post_Likes"].ToString())));
                    Reposts.Add((String.Format("{0}", reader["Post_Reposts"].ToString())));
                    Image.Add((String.Format("{0}", reader["Post_Image"].ToString())));
                }
                reader.Close();
            }
            connection.Close();
        }
    }
 private void button3_Click_2(object sender, EventArgs e)
 {
            SQL.Date.Clear(); //Clear Lists
            SQL.Text.Clear();
            SQL.Likes.Clear();
            SQL.Reposts.Clear();
            SQL.Image.Clear();
            dataGridView1.Rows.Clear();
            row_num += 30;
            SQL.Data_from_DB(row_num); //Load next 30
            LoadTable(); 
 }