Foxtable(狐表)用户栏目专家坐堂 → 操作EXCEL时如何释放内存


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

主题:操作EXCEL时如何释放内存

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
操作EXCEL时如何释放内存  发帖心情 Post By:2016/4/15 15:47:00 [只看该作者]

见如下代码,如何在操作完每个sheet时或操作完每个EXCEL文件时释放内存?

Dim path As String = args(0)
Dim file As Object


'//开始翻译
For Each file In FileSys.GetFiles(path)
    try
        Dim Book As New XLS.Book(file)
        For k As Integer = 0 To Book.Sheets.Count-1 '//多个sheet的处理
            Dim Sheet = Book.Sheets(k)
            If Sheet.Cols.Count < 500 Then
                'Application.DoEvents()
                For i As Integer = 0 To Sheet.Rows.Count-1
                    For j As Integer = 0 To Sheet.Cols.Count -1
                        If sheet(i,j).text > "" Then
                            
                            If Forms("提取工具").Controls("CBox").Checked = True  AndAlso System.Text.RegularExpressions.Regex.Match((sheet(i, j).Text),"[\u4e00-\u9fa5]+").Tostring()>"" =True Then
                                Dim dr As DataRow = DataTables("排重表").AddNew
                                dr("第一列") = sheet(i,j).Text
                            ElseIf Forms("提取工具").Controls("CBox").Checked = False   Then
                                Dim dr As DataRow = DataTables("排重表").AddNew
                                dr("第一列") = sheet(i,j).Text
                            End If
                        End If
                    Next
                Next

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/15 16:25:00 [只看该作者]

 .net的程序,都不是马上释放对象的,都是经过一段时间以后,一起把无用的对象回收的。

 

 强制的,用下面代码 gc.collect


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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2016/4/19 10:02:00 [只看该作者]

不释放对象就越来越慢。例如:只处理一个EXCEL(包含4个sheet)用时是10秒,但如果是处理多个同样的EXCEL,那执行时间就会大大打折,越来越慢,观察占用内存也越来越大,有什么解决思路吗?或者代码优化?

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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2016/4/19 10:12:00 [只看该作者]

或者说我想把多个EXCEL中(包含所有sheet)的每个单元格内容提取到FOXTABLE数据表中用什么方法最快?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/19 10:41:00 [只看该作者]

不要用foxtable的,那你直接用vba来做,它可以关闭。close

 

http://www.foxtable.com/help/topics/2121.htm

 


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


加好友 发短信
等级:五尾狐 帖子:1107 积分:10586 威望:0 精华:0 注册:2014/2/19 16:32:00
  发帖心情 Post By:2016/4/19 11:05:00 [只看该作者]

您的意思是完全拖离FOXTABLE环境在EXCEL中编VBA?还是把VBA知识在FOXTABLE中使用? 我最终的目的要把EXCEL提取出来的数据要存在狐表里的。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/19 11:09:00 [只看该作者]

不是,叫你不要用xls.book操作excel,而是用 5楼的方法操作。

 回到顶部