经典ASP& SoftArtisans ExcelWriter内存问题

时间:2013-09-05 19:16:05

标签: excel asp-classic vbscript officewriter

我在经典ASP中使用ExcelWriter(SAExcel.dll版本1.1.0.0)(我知道这是一个古老的配置)来生成一些非常重要的报告(最多约12,000行50个单元格)。生成报告时,进程的内存使用量会突然超过100mb,但是当报告完成时,它永远不会返回到先前的使用级别。通常10-15mb(但有时高达50mb!)在内存中占用,并且随着报告的生成,这会累积并最终导致错误发生并阻止生成任何新报告。

这是错误:

Microsoft VBScript runtime error  '800a01fb'  An exception occurred: 'xlw.Save' 
/report.asp, line 2947

有时错误是类似格式的错误,但也包含:

not enough storage is available

这是我的初始化ExcelWriter的代码:

Function RunExport()
    '--- Create spreadsheet
    Set xlw = Server.CreateObject("Softartisans.ExcelWriter")
    Set cells = xlw.Worksheets(1).Cells

'cells'对象填充了来自多个记录集的数据,并使用如下所示的Style和Font对象集合进行样式设置:

    set NumStyleNormal = xlw.CreateStyle
    set ReportFont2 = xlw.CreateFont

这是代码,它应该清除内存中的对象,并在填充单元格后将报告发送到浏览器:

    err.clear
    '--- Save Spreadsheet File
    xlw.Save "report.xls", saOpenInExcel
    if err.number > 0 then
        response.write err.description
    end if
    xlw.Close
    Set xlw = nothing
    Set Cells = nothing
End Function

代码在保存之前将所有记录集和字典对象设置为“无”,因此我认为这些不会导致泄漏。 ExcelWriter是否在内存中创建了某种类型的数据,而我的代码/ asp垃圾回收没有正确清理?

1 个答案:

答案 0 :(得分:0)

看起来你没有丢失任何垃圾收集,但是我为SoftArtisans(生产ExcelWriter的公司)工作,根据我们的错误跟踪,我们确实修复了v2和v3中的内存泄漏。不幸的是,这些版本几乎已经足够投票并且不再可用(我们是8岁)。如果您有任何疑问,请随时与我们联系:http://www.officewriter.com/contact-softartisans.aspx