本帖最后由 lr 于 2014-05-16 17:29:43 编辑

解决方案 »

  1.   

    从你的BmpList取出来,然后dispose掉
      

  2.   

    BmpList 是局部变量,有影响吗?
      

  3.   

    正常情况下,要调bmp.dispose();
    光从你上面几行代行。只有添加引用,完全是没有释放的意思
      

  4.   


      string sql ="select image from table";//image是sql server 里面的 image 字段
      SqlConnection con = new SqlConnection(ImageConnectStr);
                SqlCommand com = new SqlCommand(sql, con);
     
                try
                {
                    con.Open();
                    SqlDataReader dr = com.ExecuteReader();
                    while (dr.Read())
                    {        
                        byte[] imagebytes = (byte[])dr.GetValue(2);
                        MemoryStream ms = new MemoryStream(imagebytes);
                        BmpList.Add(new Bitmap(ms)); //添加图片
                        ms.Close();  //注意这里
                        imagebytes = null;
                    }
     
                    dr.Dispose();
                }
                finally
                {
                    com.Dispose();
                    if (con!=null)
                        con.Dispose();
                }
                BmpList.Clear(); //注意这里
      

  5.   

    .NET 已经有自动释放资源的能力,所以不要在乎它在什么时机释放,楼主可以不断尝试,也许会发现内存用量不会无限上升。