0

我正在制作一个使用许多图像的应用程序。该应用程序从服务器获取图像,并一次下载一个。在许多图像之后,位图的创建返回异常,但我不知道如何解决这个问题。这是我下载图像的功能:

 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;
        }

      }

有谁可以帮我离开这里吗?提前致谢!

4

4 回答 4

1

将该响应流式传输到磁盘,而不是将其保存在内存中。然后将有关您保存到临时位置而不是图像本身的图像的信息保留在周围。

于 2010-04-14T12:06:45.377 回答
1

如果您在 Picturebox 中显示所有这些(并且基于您的评论,我认为您是),那么您应该处理旧图像(此博客条目有助于解释它):

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

作为风格的旁注,方法名称应该是 PascalCase,而不是 camelCase,我会失去参数上的匈牙利概念。

于 2010-04-14T13:06:28.690 回答
0

“许多图像”当然与内存不足密切相关。位图可能会变大,它们会占用大量非托管虚拟内存。您必须使您的程序更智能,并在内存中存储更少的位图。或者将它们临时保存到文件中。或在必要时重新下载它们。并使用 Dispose() 方法正确清理它们的资源,这对于 Bitmap 类尤其重要。

于 2010-04-14T11:59:59.060 回答
0

您如何处理 System.Drawing.Bitmap 对象?你把它们都记在心里了吗?然后不可避免地会在某些时候出现内存不足的异常。

根据您的需要,您应该在某个时候丢弃图像。如果您确实需要它们,请将它们存储在闪存中的文件中。此外,请尝试使用较小的文件。

于 2010-04-14T12:00:16.733 回答