Foxtable(狐表)用户栏目专家坐堂 → 内存溢出异常


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

主题:内存溢出异常

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


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
内存溢出异常  发帖心情 Post By:2023/11/7 1:13:00 [只看该作者]

图片点击可在新窗口打开查看
excel报表插入很多图片,提示内存溢出异常
如果在循环插入图片的代码里面写img.dispose,会导致最后Book.save的时候报错“参数无效”
最终img.dispose写了在代码的最后面,也写了gc.collect,但是多次运行后会提示内存溢出异常
请问下跟图片相关的及时释放内存的代码该怎么写,放在什么位置,谢谢

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


加好友 发短信
等级:超级版主 帖子:107323 积分:545876 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/7 8:33:00 [只看该作者]

请贴出具体代码说明问题

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


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 19:46:00 [只看该作者]

 
    Dim Sheet2 As XLS.Sheet = Book.Sheets(0)

    Dim img As Image
    For pg As Integer = 0 To vars("pg") - 1
        
        img = getImage(qzs(rand.Next(0, qzs.Count)))
        Dim cz As Integer = Rand.Next (1, 4)
        Select Case cz
            Case 1
                img.RotateFlip(RotateFlipType.Rotate90FlipNone)
            Case 2
                img.rotateflip(RotateFlipType.Rotate180FlipNone)
            Case 3
                img.rotateflip(RotateFlipType.Rotate270FlipNone)
        End Select
        Sheet2(pg * 21 + 13, 13).Value = New XLS.Picture(img, 0, 0, 100, img.Height / img.Width * 100)
        
    Next
    
    Book.Save(fl)
     img.Dispose
    gc.Collect

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


加好友 发短信
等级:超级版主 帖子:107323 积分:545876 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/7 20:17:00 [只看该作者]

试试
Dim Sheet2 As XLS.Sheet = Book.Sheets(0)
    For pg As Integer = 0 To vars("pg") - 1
        Dim img As Image= getImage(qzs(rand.Next(0, qzs.Count)))
        Dim cz As Integer = Rand.Next (1, 4)
        Select Case cz
            Case 1
                img.RotateFlip(RotateFlipType.Rotate90FlipNone)
            Case 2
                img.rotateflip(RotateFlipType.Rotate180FlipNone)
            Case 3
                img.rotateflip(RotateFlipType.Rotate270FlipNone)
        End Select
        Sheet2(pg * 21 + 13, 13).Value = New XLS.Picture(img, 0, 0, 100, img.Height / img.Width * 100)
         img.Dispose
         gc.Collect
    Next
    
    Book.Save(fl)
    gc.Collect

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


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:37:00 [只看该作者]

图片点击可在新窗口打开查看
这个方法我也测试过了,在Book.Save之前注释掉任何操作,只要出现img.Dispose这一句就保存不了,就会提示参数无效

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


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:41:00 [只看该作者]

循环那里加img.Dispose的情况,我是在Book.Save上一行加的msgbox,可以运行到这个弹窗,也没有报内存溢出了,但是就是不能保存,也测试了Book是还存在的,可以输出Book第一个表的名称

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


加好友 发短信
等级:超级版主 帖子:107323 积分:545876 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/7 20:49:00 [只看该作者]

换种方式,使用vba添加图片:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=147456&replyID=61001&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
超古伯
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:55:00 [只看该作者]

vba的方法也有问题,添加的图片多了,图片的位置越来越偏,刚开始时图片跟插入图片的那行顶对齐的,越到后面图片越往上偏,用的是一样的代码,只是循环插入

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


加好友 发短信
等级:超级版主 帖子:107323 积分:545876 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/7 21:03:00 [只看该作者]

代码发上来看看

 回到顶部
帅哥哟,离线,有人找我吗?
超古伯
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:98 积分:1074 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 21:05:00 [只看该作者]

另外New XLS.Book这个也有个问题,细节区引用了图片,Book.Build()后保存,再New XLS.Book这个保存的文件,保存打开就会出现很多原先细节区生成的图片都丢失了

 回到顶部
总数 14 1 2 下一页