以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 操作EXCEL时如何释放内存 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83738) |
-- 作者:wh420 -- 发布时间:2016/4/15 15:47:00 -- 操作EXCEL时如何释放内存 见如下代码,如何在操作完每个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
|
-- 作者:大红袍 -- 发布时间:2016/4/15 16:25:00 -- .net的程序,都不是马上释放对象的,都是经过一段时间以后,一起把无用的对象回收的。
强制的,用下面代码 gc.collect |
-- 作者:wh420 -- 发布时间:2016/4/19 10:02:00 -- 不释放对象就越来越慢。例如:只处理一个EXCEL(包含4个sheet)用时是10秒,但如果是处理多个同样的EXCEL,那执行时间就会大大打折,越来越慢,观察占用内存也越来越大,有什么解决思路吗?或者代码优化? |
-- 作者:wh420 -- 发布时间:2016/4/19 10:12:00 -- 或者说我想把多个EXCEL中(包含所有sheet)的每个单元格内容提取到FOXTABLE数据表中用什么方法最快? |
-- 作者:大红袍 -- 发布时间:2016/4/19 10:41:00 -- 不要用foxtable的,那你直接用vba来做,它可以关闭。close
http://www.foxtable.com/help/topics/2121.htm
|
-- 作者:wh420 -- 发布时间:2016/4/19 11:05:00 -- 您的意思是完全拖离FOXTABLE环境在EXCEL中编VBA?还是把VBA知识在FOXTABLE中使用? 我最终的目的要把EXCEL提取出来的数据要存在狐表里的。 |
-- 作者:大红袍 -- 发布时间:2016/4/19 11:09:00 -- 不是,叫你不要用xls.book操作excel,而是用 5楼的方法操作。 |