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