.net Compact Framework 2.0 - OutOfMemory异常下载图像时

时间:2015-11-08 14:24:29

标签: c# image httpwebrequest compact-framework

我使用c#.net CF 2.0为Symbol MC75A创建软件。我们扫描条形码并返回股票信息,但我正在尝试添加从网址获取图像的功能。每次扫描都会使用数据库中的新数据刷新屏幕,并从新网址获取图像。它扫描几个条形码并返回可能没有问题的4/5图像然后突然发生OutOfMemoryException。用于获取图像的代码是:

        public Bitmap GetImage(string URL)
    {
        HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
        myRequest.Method = "GET";

        myRequest.AllowWriteStreamBuffering = false;



        HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
            myResponse.Close();


            return bmp;

    }

被叫:

                        pbImage.Image = GetImage(ProductImage);
                    pbImage.SizeMode = PictureBoxSizeMode.StretchImage;

我尝试使用pbImage.Image.Dispose()在每次新GET之前处理图像,但仍然得到相同的异常。图像大小介于100KB和550KB之间。无论它是否有所不同,图像尺寸总是超过1000px。

我是否在重新获取之前错过了正确的处理方式,或者是否以某种方式缓存了所有这些图像,然后创建了一个outofMemory异常?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案:

OutOfMemoryException loading big image to Bitmap object with the Compact Framework

似乎是解压缩2000px图像时的system.drawing,它正在创建一个未压缩的图像,在内存中提供更大的大小而异常。该解决方案显示了获取图像缩略图而非整个图像的方法。

再次感谢您的帮助。

答案 1 :(得分:0)

只是有人可以访问图像位置。对我来说更好的解决方法是创建一个名为resize.aspx的网页,并从页面填充图片文件夹作为参数。现在该页面(位于与图像位于同一位置的服务器上)能够调整图像大小并返回一个小的300x300px图像。似乎是我能想到的最好的解决方案。如果您将图像的完整URL传递到另一个页面并且该页面返回所需的缩略图,这也适用于任何URL的图像。