.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 的图像。
我正在使用 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 的图像。