Libérer de la memoire de sql server

vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 16 févr. 2008 à 12:04
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 17 févr. 2008 à 10:30
salut
j'ai une application qui se connecte a sql server dans le but d'afficher des images et d'enregistrer dans une table.
mon problème c'est avec les grandes images
quand je charge une image depuis la base je l'enregistre sur le disque puis je l'affiche
le problème c'est après accumulation d'images sql server augmente toujours sa consommation en ram malgrès que je ferme a chaque foi la connection et je fait dispose des objets utilisés
:(
voici mon code de la forme:
 private void button1_Click(object sender, EventArgs e)
        {
          
            if (pictureBox1.Image != null)
                pictureBox1.Image.Dispose();
                          SqlCommand cmds = new SqlCommand();
                          cmds.CommandText = "sp_select_pic_data";
                          cmds.CommandType = CommandType.StoredProcedure;
                          cmds.Connection = con;
                          SqlParameter p = new SqlParameter();
                          p.Value = int.Parse(num.Text);
                          p.Direction = ParameterDirection.Input;
                          p.SqlDbType = SqlDbType.BigInt;
                          p.ParameterName = "npic";
                          SqlParameter p2 = new SqlParameter();
                          p2.Value = int.Parse(pic.Text);
                          p2.Direction = ParameterDirection.Input;
                          p2.SqlDbType = SqlDbType.BigInt;
                          p2.ParameterName = "c000";
                          cmds.Parameters.Add(p);
                          cmds.Parameters.Add(p2);
                          MemoryStream ms=null;SqlDataReader d=null;
                          try
                          {
                              con.Open();
                               d= cmds.ExecuteReader();
                             
                              if (d.Read())
                                  ms = new MemoryStream((Byte[])d[0]);
                              d.Close();

                          }
                          catch (Exception r)
                          {
                              MessageBox.Show(r.Message);
                          }
                          finally
                          {
                              d.Dispose();
                              d = null;
                              con.Close();
                              cmds.Dispose();
                              cmds = null;
                          }
                          try
                          {
                              Image im = Bitmap.FromStream(ms);
                              if (File.Exists(Application.StartupPath + "\\nom.jpg"))
                                  File.Delete(Application.StartupPath + "\\nom.jpg");
                              im.Save(Application.StartupPath + "\\nom.jpg", ImageFormat.Jpeg);
                              ms.Close();
                          ms.Dispose();
                          ms = null;
                          }
                          catch (Exception m)
                          {
                              MessageBox.Show(m.Message);
                          }
        }
ceci pour charger une image de la base
je recupère deux images une grande et sa miniature qui est très petite mais le traitement c'est sur la grade
et ce code :
 if (pictureBox1.Image != null)
                pictureBox1.Image.Dispose();
            pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\nom.jpg");
pour charger l'image au picturebox

si quelqun a une solution merci pour m'aider :)

//as you like

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
17 févr. 2008 à 00:16
Salut,

Pour les manipulations de chemins, voir méthode Path.Combine au lieu de faire de la concaténation.
Concernant SQL Server, il gère entre autres un cache, donc sa consommation mémoire n'est pas forcément un problème.

/*
coq
MVP Visual C#
CoqBlog
*/
0
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
17 févr. 2008 à 07:05
donc c'est pas grave d'avoir sql server consomme une mémoire très grande???
ok j'ai oublié que j'ai augmenter la base temp pour permettre un espace temp plus grand (la nouvelle valeur est 1GO) :)
merci donc coq

//as you like
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
17 févr. 2008 à 10:30
Je n'ai pas dit que ce n'était jamais grave, mais que ça ne l'était pas forcément hein, il se peut qu'un jour tu aie un problème dans du code TSQL mais vu ta description de la chose ça m'étonnerais que ça soit le cas sur ce batch là.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous