以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]程序经常死掉  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=77263)

--  作者:machle
--  发布时间:2015/11/14 13:37:00
--  [求助]程序经常死掉
这段代码,无法长时间循环,一会生成2个,一会生成20多个,有的时候生成100多个。程序经常死机。

请问我该怎么解决一下?谢谢!

Dim j As Integer

For j = 0 To 2827
    Dim tm As String  = ProjectPath & "Attachments\\Labelplate.doc" \'指定模板文件
    
    With Tables("名录")
        
        Dim fileName As String =ProjectPath & "ReportsDOC\\" & Tables("名录").Rows(j)("号") & "-" & Tables("名录").Rows(j)("UN") & "-" &  Tables("名录").Rows(j)("品名") & " 标签.doc" \'指定目标文件
        Dim fileName2 As String =ProjectPath & "ReportsDOC\\" & Tables("名录").Rows(j)("号") & "-" & Tables("名录").Rows(j)("UN") & "-" &  Tables("名录").Rows(j)("品名") & " 标签.pdf" \'指定目标文件
        
        \'指定目标文件
        Dim wrt As New WordReport(Tables("名录"),tm,fileName) \'定义一个WordReport
        wrt.Build() \'逐行生成报表
        wrt.SaveToPDF(fileName2)
        wrt.quit
    End With
    
Next

--  作者:Hyphen
--  发布时间:2015/11/14 14:39:00
--  

代码本身没有什么问题。检查下模板和数据。

 

循环操作数据太多,可能会导致内存及磁盘空间不足。

 

看逻辑,生成的文件只是名称不一样,内容都一样的,没必要重复生成。生成一份,再改名复制就是了

 

 


--  作者:machle
--  发布时间:2015/11/14 15:10:00
--  回复:(Hyphen)代码本身没有什么问题。检查下模板和...
电脑16g内存。
需要生成2800多个文件。内容不一样。

但还是死掉。

--  作者:Hyphen
--  发布时间:2015/11/14 15:35:00
--  

用同一份数据做循环测试,试多几次,程序死掉的时候,生成到哪一份文件,分析一下那份文件以及表数据,有没有什么规律。

 

死掉的时候,观察内存和CPU的运行,word的活动进程(不是主进程,在资源监测器中查看)有几个。

 

试试,分成几批生成,比如一次循环100个,完成后再生成下100个文件,如此类推


--  作者:大红袍
--  发布时间:2015/11/15 11:02:00
--  
呃,不是死的问题吧?比如你 一个生成需要5秒,1000个,就是5000秒,也就是一个多小时啊。