解决方案 »

  1.   

    本来是方法内的局域变量来着,连Image也是,也报这错误来着。
      

  2.   

    public bool SetPic(byte[] filebytes)
            {
                    MemoryStream ms = new MemoryStream(filebytes);
                    Image img = Image.FromStream(ms);                ms.Close();
                    ms.Dispose();
    }   试试
      

  3.   

    GDI+报的内存不足基本都不是内存不足,而是因为GDI+对内存的使用和.net的GC机制一直都有些冲突。如果是用MemoryStream创建image,不要手动close或者dispose它,很可能会出错的(也有办法能让它100%重现out of memory),你的代码里把if (ms != null) ms.Close();去掉说不定就好了。如果不行,那需要保持对ms的引用,不要让它被GC。
      

  4.   


    这让我想起了MSDN里FromStream的一段话:You must keep the stream open for the lifetime of the Image.
      

  5.   

    将图像以二进制流形式存储到数据库中示例
     protected void imgbtnCreate_Click(object sender, ImageClickEventArgs e)
        {
            
            string PerHomeName=tbPerHomeName.Text;//获取空间名
           
            string PerHomeSign=txtPerSign.Text; //获取个性签名
            
            string imgPath = uploadFile.PostedFile.FileName;//获取文件件名
            
            string lastName = imgPath.Substring(imgPath.LastIndexOf(".") + 1);//获取文件上传后缀名
            SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
            conn.Open();
            if (uploadFile.PostedFile.FileName != "" && lastName.ToLower() == "jpg" || lastName.ToLower() == "gif")
            {
                if (uploadFile.PostedFile.ContentLength > 40960)
                {
                    Response.Write("<script language='javaScript'>alert('你上传的图片超过了40KB!')</script>");
                    return;
                }
                int imgLength = uploadFile.PostedFile.ContentLength;//获取上传文件大小
                Byte[] imageData = new Byte[imgLength]; //定义Byte数组
                HttpPostedFile hp = uploadFile.PostedFile;//创建访问客户端上传文件的对象
                Stream imagestream = hp.InputStream;//创建数据流对象
                //将图片数据放到image数据对象实例中,其中0代表数组指针的起始位置,imagelength表示要读取流的长度
                imagestream.Read(imageData, 0, imgLength);
                string sqlstr = "insert into PerHomeDetail(PerHomeName,PerHomeSign,PerHomeLogo)values('" + PerHomeName + "','" + PerHomeSign + "',@ImageData)";
                SqlCommand comm = new SqlCommand(sqlstr, conn);
                comm.Parameters.Add("@ImageData", SqlDbType.Image);
                comm.Parameters["@ImageData"].Value = imageData;
                comm.ExecuteNonQuery();
                conn.Close();
                Response.Write("<Script>alert('个人空间创建成功!')</Script>");
            }
            else
            {
                Response.Write("<script>alert('上传头像不能为空,且格式必须为gif或jpg!');location='javascript:history.go(-1)'</script>");
            }
        }
      

  6.   

    图片用完记得dispose就可以了。
      

  7.   


    我的貌似是解决了,不是没对流和图片释放的问题。应该是被PictureEdit控件占住了图片和流,无法进行彻底释放。我把这控件的Image给释放,目前尝试存了百来张5MB的,没在溢出。如果你也是有用控件将图片给显示出来,也尝试下在流和图片都关闭之后,将这个图片显示控件在窗体关闭前也做一次累死Dispose的操作吧