OutOfMemoryException при экспорте большого PDF
Добавлено: 23 ноя 2024, 13:43
Добрый день!
Мы формируем платежные документы в виде PDF
при формировании PDF на 2000 страниц, наше приложение падает с ошибкой переполнения heap (OutOfMemoryException). На данный момент ограничение стоит в 8Гб.
Подскажите, пожалуйста, какие требования к серверу, который делает эту операцию? Сколько необходимо памяти для реализации нашей задачи?
Шаблон отчета во вложении. Возможно, вы сможете предложить альтернативную компоновку для менее ресурсоемкого экспорта в PDF. Или, быть может, предложите более оптимальный источник (на данный момент мы используем json, который формирует другой сервис).
код, выполняющий экспорт:
report = StiSerializeManager.deserializeReport(reportStream);
report.getDictionary().getDatabases().clear();
report.getDictionary().getDatabases().add(jsonDatabase);
report.setCalculationMode(StiCalculationMode.Interpretation);
report.Render(false);
report.exportDocument(StiExportFormat.Pdf, exportService, file, exportSettings, null);
библиотека: 'com.stimulsoft:stimulsoft-reports-libs:2024.2.2'
кстати, обратили внимание на то, что после генерации файла, СтимулСофт не освобождает неиспользуемую память. Нам приходится использовать напрямую сборщик мусора (System.gc()), что является плохой практикой. Ведутся ли в этом направлении какие-то работы, возможны ли оптимизации в ближайших релизах?
Спасибо.
С уважением, Маргарита
Мы формируем платежные документы в виде PDF
при формировании PDF на 2000 страниц, наше приложение падает с ошибкой переполнения heap (OutOfMemoryException). На данный момент ограничение стоит в 8Гб.
Подскажите, пожалуйста, какие требования к серверу, который делает эту операцию? Сколько необходимо памяти для реализации нашей задачи?
Шаблон отчета во вложении. Возможно, вы сможете предложить альтернативную компоновку для менее ресурсоемкого экспорта в PDF. Или, быть может, предложите более оптимальный источник (на данный момент мы используем json, который формирует другой сервис).
код, выполняющий экспорт:
report = StiSerializeManager.deserializeReport(reportStream);
report.getDictionary().getDatabases().clear();
report.getDictionary().getDatabases().add(jsonDatabase);
report.setCalculationMode(StiCalculationMode.Interpretation);
report.Render(false);
report.exportDocument(StiExportFormat.Pdf, exportService, file, exportSettings, null);
библиотека: 'com.stimulsoft:stimulsoft-reports-libs:2024.2.2'
кстати, обратили внимание на то, что после генерации файла, СтимулСофт не освобождает неиспользуемую память. Нам приходится использовать напрямую сборщик мусора (System.gc()), что является плохой практикой. Ведутся ли в этом направлении какие-то работы, возможны ли оптимизации в ближайших релизах?
Спасибо.
С уважением, Маргарита