Я хочу удалить память процесса при вставке изображения в db c #

0

У меня есть код ниже, чтобы поместить изображение в окно изображения:

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, но я не знаю Не знаю как.

  • 2
    У вас есть ряд неоптимальных вещей, происходящих там. a) Не используйте GetBuffer - он будет хранить до 2ce столько байтов, сколько необходимо. Используйте ToArray() b) никогда не храните пароли в виде простого текста c) никогда не сохраняйте даты в виде строки d) никогда не глотайте исключения e) используйте Add(string, dbType) вместо AddWithValue f) AddWithValue вашу команду и соединение, чтобы предотвратить утечки. В общем случае вы можете просто сохранить путь к архивному имени файла, чтобы предотвратить вздутие базы данных и быстрее получить доступ к изображению. Пожалуйста, прочитайте, как спросить и принять тур
  • 0
    спасибо за эти советы
Теги:
memory-management
picturebox

1 ответ

0
Лучший ответ

Вы должны пойти на 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
{
   .....
}
  • 0
    Спасибо! теперь это работает хорошо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню