Foxtable(狐表)用户栏目专家坐堂 → [求助]bitmap 如何释放内存


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

主题:[求助]bitmap 如何释放内存

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
[求助]bitmap 如何释放内存  发帖心情 Post By:2017/1/19 10:43:00 [显示全部帖子]

内存占用一直往上升高,最后报错:内存溢出
百度了N个方法,无果,请指点!
内存升高情况如图:

图片点击可在新窗口打开查看此主题相关图片如下:内存升高图片.gif
图片点击可在新窗口打开查看

代码如下:
Public Enum Definition
One = 1
Two = 2
Three = 3
Four = 4
Five = 5
Six = 6
Seven = 7
Eight = 8
Nine = 9
Ten = 10
End Enum
''' <summary>
''' 将PDF文档转换为图片的方法
''' </summary>
''' <param name="pdfInputPath">PDF文件路径</param>
''' <param name="imageOutputPath">图片输出路径</param>
''' <param name="imageName">生成图片的名字</param>
''' <param name="startPageNum">从PDF文档的第几页开始转换</param>
''' <param name="endPageNum">从PDF文档的第几页开始停止转换</param>
''' <param name="imageFormat">设置所需图片格式</param>
''' <param name="definition">设置图片的清晰度,数字越大越清晰</param>
Public Sub ConvertPDF2Image(pdfInputPath As String, imageOutputPath As String, imageName As String, startPageNum As Integer, endPageNum As Integer, imageFormat As ImageFormat, _
definition As Definition)
Dim pdfFile__1 As O2S.Components.PDFRender4NET.PDFFile = O2S.Components.PDFRender4NET.PDFFile.Open(pdfInputPath)
If Not IO.Directory.Exists(imageOutputPath) Then
    IO.Directory.CreateDirectory(imageOutputPath)
End If
'' validate pageNum
If startPageNum <= 0 Then
    startPageNum = 1
End If
If endPageNum > pdfFile__1.PageCount Then
    endPageNum = pdfFile__1.PageCount
End If
If startPageNum > endPageNum Then
    Dim tempPageNum As Integer = startPageNum
    startPageNum = endPageNum
    endPageNum = startPageNum
End If


For i As Integer = startPageNum To endPageNum
    Dim pageImage As System.Drawing.Bitmap = pdfFile__1.GetPageImage(i - 1, 56 * CInt(definition))
    pageImage.Save(imageOutputPath & imageName & i.ToString() & "." & imageFormat.ToString(), imageFormat)
    ‘Application.DoEvents()
    'pageImage = Nothing      ‘报错:未引用到实例
    'System.Drawing.Bitmap.recycle    ’提示:不是Bitmap的成员
    pageImage.Dispose()
    GC.Collect()  
p.Value = i
Next
pdfFile__1.Dispose()
End Sub

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2017/1/19 11:15:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:还是回收不了.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2017/1/19 11:27:00 [显示全部帖子]

pdf文件:foxtable_help_2013.pdf
生成这个pdf文件的全部图片:endPageNum = pdfFile__1.PageCount
其他没变!


图片点击可在新窗口打开查看此主题相关图片如下:捕获0000.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/1/19 11:27:51编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2017/1/19 12:04:00 [显示全部帖子]

问题是这样解决的,全局代码作相应改动,但是bitmap 如何释放内存的方法未找到!
Dim imageOutputPath As String = "d:\foxtable_help_2013\"
Dim pdfInputPath As String = "d:\foxtable_help_2013.pdf"
Dim pdfFile__1 As O2S.Components.PDFRender4NET.PDFFile = O2S.Components.PDFRender4NET.PDFFile.Open(pdfInputPath)
Dim Endpage As Integer = pdfFile__1.PageCount
For i As Integer = 1 To Endpage
ConvertPDF2Image(pdfInputPath,imageOutputPath, "foxtable", i,i, ImageFormat.Jpeg, Definition.One)
Next

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2017/1/19 13:08:00 [显示全部帖子]

受教了,十分感谢!
[此贴子已经被作者于2017/1/19 13:23:53编辑过]

 回到顶部