我正在其使用许多图像的应用程序。将应用程序从服务器的图像,并下载他们一次一个。 许多图像后位图的创建返回一个例外,但我不知道如何解决这个问题。这是我的用于下载图像功能:

 public static Bitmap getImageFromWholeURL(String sURL)
    {

        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(sURL);
        myRequest.Method = "GET";


        // If it does not exist anything on the url, then return null
        try
        {
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
            myResponse.Close();
            return bmp;
        }
        catch (Exception e)
        {
            return null;
        }

      }

谁能帮助我在这里? 由于事先!

有帮助吗?

解决方案

“许多图像”是当然密切配合的存储器耗尽相关联。位图可以得到很大,他们会吃了大量的非托管的虚拟内存。你必须使你的程序更聪明,存储较少的位图在内存中。或暂时将它们保存到一个文件中。或者,如果需要重新下载它们。和适当地清理自己的资源与Dispose()方法,用于Bitmap类特别重要的。

其他提示

流,其响应于磁盘而不是保持它在存储器中。然后,保持周围约你保存到一个临时的地方,而不是图像本身的图像信息。

如果你正在展示这些都在PictureBox(并根据您的意见,我认为你是),那么你应该弃置旧的图像(的此博客条目有助于解释):

if(myPictureBox.Image != null)
{
    myPictureBox.Image.Dispose();
}
myPictureBox.Image = getImageFromWholeURL(url);

由于款式一个侧面说明,方法名应该是PascalCase,没有驼峰,我会失去对参数匈牙利概念。

你有什么用System.Drawing.Bitmap的对象呢?你保留所有的人都在内存中?然后,这是不可避免的,你会在某个时候出现内存不足的异常。

根据您的需求,你应该在某些时候丢弃图像。如果你确实需要它们,将它们存储在闪存中的文件。另外,尝试使用更小尺寸的文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top