Foxtable(狐表)用户栏目专家坐堂 → 从二进制列提取图片保存,提示内存溢出


  共有3894人关注过本帖树形打印复制链接

主题:从二进制列提取图片保存,提示内存溢出

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 9:00:00 [显示全部帖子]

图片是很占内存的,试试

For Each dr As DataRow In dt.DataRows
    If dr.Isnull("image_1") = False Then
        Dim bmp As System.Drawing.Bitmap
        Dim imagebytes As Byte() = dr("image_1")
        Using Stream As System.IO.Stream = New System.IO.MemoryStream(imagebytes)
            
            bmp = New System.Drawing.Bitmap(stream)
            bmp.save("c:\desk\image_1\" + dr("style_id") + ".jpg")
            bmp.Dispose
        End Using
        
    End If
Next 

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 9:15:00 [显示全部帖子]

2楼代码就是加了释放内存的。如果不行,可能是短时间内处理的图片过多,内存来不及释放。考虑分批处理

其次可能是有过大的图片,这种就没有办法了,Foxtable毕竟不是专业的图片处理软件

再次,sql语句是一次性提取所有数据的,数据太多也会爆内存。考虑分批处理,或者试试这种:http://www.foxtable.com/webhelp/topics/2953.htm,不需要一次性加载全部数据

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 9:31:00 [显示全部帖子]

加载出来是个Image 对象,再保存就是了。或者使用SQLLoadFile,可以直接保存:http://www.foxtable.com/webhelp/topics/2952.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 10:35:00 [显示全部帖子]

解决问题请直接贴出完整代码,不要老是一截一截的

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 10:53:00 [显示全部帖子]

Foxtable提供的二进制用法只能用在主表里,不能用到临时表。先把表格加进来:http://www.foxtable.com/webhelp/topics/2950.htm

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 13:36:00 [显示全部帖子]

试试
……
msgbox(src) '弹出看看,另外"c:\desk\aa\"这个目录是否存在?
img = dr.SQLLoadImage("image_1")
Dim bmp  = new bitmap(img)
bmp.save(src,img.RawFormat)
bmp.Dispose
    Next
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/5/17 13:50:00 [显示全部帖子]

下面2句去掉Using 已经有同样的效果的,没有必要重复

            stream.Close
            stream.Dispose

 回到顶部