当尝试在jpg中加载20 Mb或在bmp中加载200 Mb的图像时,我的内存不足
答案 0 :(得分:1)
我们的地图控件中有一个非常大的(~50MB)光栅图像。
解决方案是将主图像切割成小块并加载到 Image [,] 数组中。
-------------------------------------
| pic00 | pic01 | | |
-------------------------------------
| pic10 | | | |
pic.png -> -------------------------------------
| | | | |
-------------------------------------
| | | | picnm |
-------------------------------------
您可以使用 Graphics.DrawImage(..)绘制这些作品。
唯一的问题是:如果您需要在屏幕上显示整个图片,绘图过程可能会很慢。保存缩略图并在需要时显示的好方法。
答案 1 :(得分:0)
我认为web.config中可能有一个设置允许您的应用消耗超过默认的内存量。如果失败了,如果它是一个网络应用程序,则创建一个更大的应用程序池。
还要确保尽快处理()资源。
默认情况下,.net不会做任何花哨的技巧来提高内存效率。它本身并不坏,但它不会对你有任何好处。
答案 2 :(得分:0)
如果你正在使用WPF,你可以将图像的“缩略图”加载到内存中,这可能是更合理的分辨率:
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.DecodePixelWidth = 100;
bitmapImage.UriSource = new Uri(imageData.Name);
bitmapImage.EndInit();
this.imageControl.Source = bitmapImage;