CF 2.0SP2中的新Bitmap OutOfMemoryException

时间:2009-11-01 18:49:52

标签: c# compact-framework image-manipulation

我有这段代码:

if (archivoBinario != null)
{
    MemoryStream ms = new MemoryStream(archivoBinario);
    Bitmap imagen = new Bitmap(ms);
    PicBoxImagen.Image = imagen;
}

当从MemoryStream创建一个新的位图ms时,它会抛出一个System.OutOfMemoryException。

注意:archivoBinario是一个字节数组,其大小为9778字节。

我认为记忆的大小并不是问题所在。有什么建议吗?

图像由WCF服务发送到设备并存储在SQL Server CE 3.1数据库中。也许在发送图像时可能会出现问题。

我已经比较了表示存储在SQL Server 2005中的图像的字节和存储在SQL Server CE中的图像,并且是相同的。

谢谢!

3 个答案:

答案 0 :(得分:1)

如果在分配新图像之前它不为null,则必须调用PicBoxImagen.Image上的Dispose。如果你不这样做,你就会有泄漏。有关原因的详细解释,请参阅this blog entry

答案 1 :(得分:1)

Image类会抛出OOM,包括无效格式。要检查您的基础,请确保它是有效的图像。将这些9778字节保存到文件并尝试查看(在CF和/或普通PC上)。

但是9 kB压缩图像可能会爆炸,因此它仍然可能是真正的OOM。

答案 2 :(得分:0)

创建图像有时会为内存以外的资源抛出OutOfMemoryException(容易引起混淆)。

您是否有可能没有处置Windows窗体句柄?

另一种可能性是你真的 内存不足 - 例如,一个小文件仍然可以代表一个巨大的图片(例如,如果它只是一种颜色)。如果Windows尝试创建图像的内存中逐像素表示,则可能会显示相同的症状。像素的大小是多少?