程序使用太多内存

时间:2016-02-15 14:05:23

标签: c#

我从数据库加载到dataGridView 30行(来自路径的文本和图像)。每张图片大约有45-60kB。 当我的程序运行时,它使用30mb RAM。如果按button3_Click_2(加载下30行),每次使用+ 20mb RAM,每次...... 我怎样才能解决我的问题?

 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
 }
 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(); 
 }

0 个答案:

没有答案