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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
 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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 if (pictureBox1.Image != null)
                pictureBox1.Image.Dispose();
            pictureBox1.Image = Image.FromFile(Application.StartupPath + "\\nom.jpg");
pour charger l'image au picturebox

si quelqu'un a une solution merci pour m'aider