У меня есть код ниже, чтобы поместить изображение в окно изображения:
OpenFileDialog f = new OpenFileDialog();
f.Filter = "JPG(*JPG)|*.jpg";
if (f.ShowDialog() == DialogResult.OK)
{
pictureBox4.Image = Image.FromFile(f.FileName);
}
и этот код ниже, чтобы вставить изображение в базу данных:
public void Team()//insert into db new teammate
{
try
{
MemoryStream ms = new MemoryStream();
pictureBox4.Image.Save(ms, pictureBox4.Image.RawFormat);
byte[] a = ms.GetBuffer();
ms.Close();
SqlConnection con = new SqlConnection(stringcon); //CONNECTION
cmd.Parameters.Clear();
cmd.Connection = con;
cmd.CommandText = "INSERT INTO team(lastname,firstname,phonenumber,email,[password],[function],[role],registerdata,personaldescription,profilepicture) VALUES(@lastname,@firstname,@phonenumber,@email,@password,@function,@role,@registerdata,@personaldescription,@profilepicture)";
cmd.Parameters.AddWithValue("@lastname", lastname_textbox.Text);
cmd.Parameters.AddWithValue("@firstname", firstname_textbox.Text);
cmd.Parameters.AddWithValue("@phonenumber", "+"+phone_textbox.Text);
cmd.Parameters.AddWithValue("@email", email_textbox.Text);
cmd.Parameters.AddWithValue("@password", repeatpassword_textbox.Text);
cmd.Parameters.AddWithValue("@function", function_textbox.Text);
cmd.Parameters.AddWithValue("@role", role_dropbox.selectedValue);
cmd.Parameters.AddWithValue("@registerdata", DateTime.Now.ToString("yyyy-MM-dd HH: mm:ss"));
cmd.Parameters.AddWithValue("@personaldescription", personaldescription_textbox.Text);
cmd.Parameters.AddWithValue("@profilepicture", a);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
ex.ToString();
return;
}
}
Теперь, после вставки изображения в db, чтобы очистить память процесса, потому что увеличивайте память процесса, это и это не хорошо, потому что я хочу вставить 10 изображений, подобных этому, каждый раз, когда я вставляю в db. ex: У меня есть память процесса 120mb при инициализации после того, как я вставляю изображение в окно с картинкой. У меня 150 мб, но когда я вставляю 10 изображений, у меня есть 120mb + 30mb * 10..but, я думаю, что могу очистить эту память после вставки в db, но я не знаю Не знаю как.
Вы должны пойти на using
блока кода
Оператор using упрощает код, который вы должны писать, чтобы создать, а затем, наконец, очистить объект. Оператор using получает указанный ресурс, выполняет инструкции и, наконец, вызывает метод Dispose объекта для очистки объекта.
Переместите свой код при using
качестве
using (SqlConnection con = new SqlConnection(connectionString))
{
MemoryStream ms = new MemoryStream();
pictureBox4.Image.Save(ms, pictureBox4.Image.RawFormat);
byte[] a = ms.GetBuffer();
ms.Close();
...........
}
За сценой, using
оператор, транслируется в
try
{
.....
}
finally
{
.....
}
ToArray()
b) никогда не храните пароли в виде простого текста c) никогда не сохраняйте даты в виде строки d) никогда не глотайте исключения e) используйтеAdd(string, dbType)
вместоAddWithValue
f)AddWithValue
вашу команду и соединение, чтобы предотвратить утечки. В общем случае вы можете просто сохранить путь к архивному имени файла, чтобы предотвратить вздутие базы данных и быстрее получить доступ к изображению. Пожалуйста, прочитайте, как спросить и принять тур