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


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

主题:内存溢出异常

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望: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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望: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

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:37:00 [显示全部帖子]

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

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:41:00 [显示全部帖子]

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

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 20:55:00 [显示全部帖子]

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

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 21:05:00 [显示全部帖子]

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

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 21:27:00 [显示全部帖子]

vba示例:

Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("F:\桌面\示例.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim tp As String = "F:\桌面\示例.jpg"
For i As Integer = 1 To 100
    Ws.Rows(i).RowHeight = 35
    ws.Shapes.AddPicture(tp, False, True, Ws.Rows(i).left , Ws.Rows(i).Top, - 1, - 1)
Next
Wb.Saveas ("F:\桌面\示例结果.xls")
App.quit
Gc.Collect

结果前后对比:
图片点击可在新窗口打开查看   图片点击可在新窗口打开查看

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


加好友 发短信
等级:幼狐 帖子:98 积分:1080 威望:0 精华:0 注册:2017/4/4 14:19:00
  发帖心情 Post By:2023/11/7 21:47:00 [显示全部帖子]

再试几遍就会出现了,已解决:循环里面加一句pic.Top = Ws.Rows(i).Top

 回到顶部