我从数据库加载到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();
}