以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 内存溢出异常 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189038) |
-- 作者:超古伯 -- 发布时间:2023/11/7 1:13:00 -- 内存溢出异常 excel报表插入很多图片,提示内存溢出异常 如果在循环插入图片的代码里面写img.dispose,会导致最后Book.save的时候报错“参数无效” 最终img.dispose写了在代码的最后面,也写了gc.collect,但是多次运行后会提示内存溢出异常 请问下跟图片相关的及时释放内存的代码该怎么写,放在什么位置,谢谢
|
-- 作者:有点蓝 -- 发布时间:2023/11/7 8:33:00 -- 请贴出具体代码说明问题 |
-- 作者:超古伯 -- 发布时间: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
|
-- 作者:有点蓝 -- 发布时间: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
|
-- 作者:超古伯 -- 发布时间:2023/11/7 20:37:00 -- 这个方法我也测试过了,在Book.Save之前注释掉任何操作,只要出现img.Dispose这一句就保存不了,就会提示参数无效
|
-- 作者:超古伯 -- 发布时间:2023/11/7 20:41:00 -- 循环那里加img.Dispose的情况,我是在Book.Save上一行加的msgbox,可以运行到这个弹窗,也没有报内存溢出了,但是就是不能保存,也测试了Book是还存在的,可以输出Book第一个表的名称 |
-- 作者:有点蓝 -- 发布时间:2023/11/7 20:49:00 -- 换种方式,使用vba添加图片:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=147456&replyID=61001&skin=1 |
-- 作者:超古伯 -- 发布时间:2023/11/7 20:55:00 -- vba的方法也有问题,添加的图片多了,图片的位置越来越偏,刚开始时图片跟插入图片的那行顶对齐的,越到后面图片越往上偏,用的是一样的代码,只是循环插入 |
-- 作者:有点蓝 -- 发布时间:2023/11/7 21:03:00 -- 代码发上来看看 |
-- 作者:超古伯 -- 发布时间:2023/11/7 21:05:00 -- 另外New XLS.Book这个也有个问题,细节区引用了图片,Book.Build()后保存,再New XLS.Book这个保存的文件,保存打开就会出现很多原先细节区生成的图片都丢失了 |