doo*_*urt 41 asp.net image bitmap
我有一个图像上传器和裁剪器,它创建缩略图,我偶尔会在以下行中获得Out Of Memory异常:
Dim bm As Bitmap = System.Drawing.Image.FromFile(imageFile)
Run Code Online (Sandbox Code Playgroud)
错误的发生是微小的,非常罕见,但我总是想知道可能导致它的原因.imageFile变量只是一个Server.MapPath到图像的路径.
我很好奇,如果有人以前遇到过这个问题,他们是否有任何想法可能导致它?这可能是图像的大小吗?
我可以在必要时发布代码以及我所拥有的任何支持信息,但是我很乐意听到人们对此的看法.
Jon*_*eet 41
这是值得了解OutOfMemoryException异常并不总是真的意味着它的内存不足-特别是不与文件打交道时.我相信如果你出于某种原因用完手柄也会发生这种情况.
你完成它们之后是否处理了所有的位图?对于单个图像,这是否会重复发生?
Ian*_*cer 33
如果这不是一个糟糕的图像文件,但实际上是正常的问题,Image.FromFile
其中它使文件句柄打开,那么使用该解决方案Image.FromStream
.
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (Image original = Image.FromStream(fs))
{
...
Run Code Online (Sandbox Code Playgroud)
使用显式Dispose()
,using()
语句或null
在位图上设置值不能解决问题Image.FromFile
.
因此,如果您运行App一段时间并打开许多文件,请考虑使用Image.FromStream()
.
小智 7
我今天遇到了同样的问题,同时为一个充满图像的文件夹创建缩略图图像.事实证明,"Out Of Memory"每次恰好出现在同一点.当我查看包含要转换的图像的文件夹时,我发现创建问题的文件是thumbs.db.我添加了一些代码以确保只转换图像文件并解决了问题.
我的代码基本上是
For Each imageFile as FileInfo in fileList
If imageFile.Extension = ".jpg" Or imageFile.Extension = ".gif" Then
...proceed with the conversion
End If
Next
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.