Я использую ExcelWriter (SAExcel.dll версии 1.1.0.0) в классическом ASP (я знаю, что это древняя конфигурация), чтобы генерировать довольно красивые отчеты (~ 12 000 строк из 50 ячеек на большинство). При генерации отчетов потребление памяти процесса увеличивается чуть более 100 МБ, но когда отчет завершен, он никогда не возвращается к прежнему уровню использования. Обычно 10-15 Мб (но иногда до 50 Мбайт!) Остается занятым в памяти, и по мере создания отчетов это накапливается и в конечном итоге вызывает ошибку и предотвращает создание любых новых отчетов.Classic ASP & SoftArtisans Ошибка памяти ExcelWriter
Вот ошибка:
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' заполнен данными из нескольких наборов записей и стилизован с коллекцией на стиль и шрифт объекты, созданные как это:
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 какие-то данные в памяти, что моя сборка мусора code/asp не очищается должным образом?