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

.net Compact Framework 2.0 - OutOfMemory Exception When downloading an image

我正在使用 c# .net CF 2.0 为 Symbol MC75A 创建软件。我们扫描条形码,它 returns 股票信息,但我正在尝试添加一个从 url 获取图像的功能。每次扫描都会使用数据库中的新数据刷新屏幕,并从新 url 获取图像。它扫描了一些条形码和 returns 可能 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 之间。图片大小总是每边超过 1000 像素是否有影响。

我是不是在重新获取之前错过了正确的处理方式,还是它以某种方式缓存了所有这些图像,然后造成了内存不足的异常?

我在这里找到了我的解决方案:

OutOfMemoryException loading big image to Bitmap object with the Compact Framework

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

再次感谢您的帮助。

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