我有一个内存泄漏问题。
我有一个这样的代码button_click
:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim ms As New IO.MemoryStream
Dim bm As New Bitmap("\Application Data\imgs\IMG22.jpg")
bm.Save(ms, Drawing.Imaging.ImageFormat.Jpeg)
End Sub
当我在我的笔记本上运行.exe文件此代码工作得很好(我是说在Windows7中/与.NET Framework全功能32位),但是当我在用的WindowsMobile 6.1的设备运行应用程序的应用程序将引发此异常:
SmartDeviceProject22.exe
OutOfMemoryException
在
Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
at
System.Drawing.Image.Save(Stream stream, ImageFormat format)
at
SmartDeviceProject22.Form1.Button3_Click(Object sender, EventArgs e)
at
....
图像大小为200KB左右,宽度和高度周围1500px。 图像的详细信息:
- 尺寸:最高1536x2048
- 水平清晰度:为72dpi
- 水平清晰度:为72dpi
- 位深度:24
- 分辨率单位:2
- 颜色表示:sRGB的 -
任何帮助将非常感激。
我尝试@asawyer的代码,甚至删除所有代码,参考等,问题不断,我想这是一些关于图像的宽度/高度或紧凑的框架。
任何其他意见?
测试好后问题的解决和解释出头真正的问题,这不是一个内存泄漏,就像@pdriegen表示,其内存有问题可用。
我改变我的代码,这种情况(在移动设备测试):
Dim fs As IO.FileStream = IO.File.OpenRead("\Application Data\ryder\IMG23.jpg")
Dim arrb(fs.Length) As Byte
fs.Read(arrb, 0, arrb.Length)
fs.Close()
fs.Dispose()
并与上述代码(显然)我得到一个字节()中使用的数据集的数据库,以存储图像的(阵列)。
结论:加载一个位图对象的MemoryStream,坏主意。 非常感谢大家谁需要它的时间来阅读我的问题,特别是那些谁张贴自己的答案。
解决方案(如果你需要显示在一个图片框的图像):
几个星期之后,这可能是最好的(免费)的解决方案:如在此说明的实施ImageHelper: ImageHelper
这个类/样品从OpenNetCF使用Drawing命名空间( http://www.opennetcf.com/ )
它的伟大工程,它解决了我的记忆烦恼加载大位图到内存中,其实我们加载一个缩略图,所以在内存中的大小显着减小,避免了内存不足的异常问题。
关于克里斯·塔克我只是意识到,张贴关于ImageHelper和OpenNetCF的联合创始人它在这里的计算器,这里的作者是他的个人资料: https://stackoverflow.com/users/13154/ctacke